Ruby で標準出力を取得する

Ruby で標準出力された値を取得したかったんですが、次のように実現できました。

コード

require "stringio"

def func
    p (1..10).select{ |it| it % 2 == 0 }
end

# 標準出力先を指定
$stdout = StringIO.new

# 標準出力があるメソッドの呼び出し
func
func
func

# 出力された値を取得
result = $stdout.string

# 出力先を戻す
$stdout = STDOUT

puts result

出力

[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]

$stdout に任意の StringIO を設定すればよいみたい。