dポイントプレゼントキャンペーン実施中!

ruby初心者です。
プログラム中の標準出力を、通常の出力も表示しながら取得したいと考えています。
自分でもいろいろ調べてみたのですが、
標準出力を取得する以下のようなコード
========================================================
# ブロック内の標準出力を取得する
def capture_stdout
out = StringIO.new
$stdout = out
yield
return out.string
ensure
$stdout = STDOUT
end

(ttp://blog.livedoor.jp/sonots/archives/33344291.html)
=================================================
は見つけたのですが、
これだと出力結果は、
capture_stdoutのブロックが終了しないことには取得できません。

capture_stdoutの中のブロック内プログラムの出力をコンソールに表示しながら、
最後に出力結果も取得したいのですが、
何か方法はあるのでしょうか?
教えてください。

A 回答 (2件)

こんな感じで



class MySTDOUT < IO
def initialize(file)
@f = File.open(file,"w")
super(1,"w")
end
def close
@f.close
super
end
def write(str)
@f.write(str)
super
end
end

$stdout=MySTDOUT.new("1234.txt")

p [1,2,3,4,5]
puts "This is a pen."
    • good
    • 0
この回答へのお礼

回答有難うございます。
勉強になりました。

お礼日時:2014/08/30 19:38

OSが不明なのですが、linux等のunix系であれば以下のようにします。


ruby あなたのスクリプト名
上記のコマンドを実行すると、実行結果が画面に表示されますが、
表示すると同時に、ファイルに書き込むには tee コマンドを使用します。

ruby あなたのスクリプト名 tee log.txt

とすると log.txtに画面に表示された内容とおなじものが書き込まれます。
    • good
    • 0
この回答へのお礼

回答有難うございます。
できればプログラム側で行いたいのですが、
何か方法はありますでしょうか?

お礼日時:2014/08/25 22:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!