タグ

2013年1月30日のブックマーク (1件)

  • Rubyスクリプト中から別のRubyスクリプトを呼び出した時の標準出力 – .com-pound

    Rubyスクリプトから別のRubyスクリプトを呼び出したい時がある. そういう場合, msg=`hoge.rb` とすると,hoge.rbが標準出力へ出力した文字列すべてを変数msgで受け取ることが出来る. 1行ずつ受け取って処理したい場合は, IO.popen("hoge.rb") do |pipe| pipe.each do | line | print line end end という感じにすれば,1行ずつとって表示することが出来る. しかし,デフォルトだと,Rubyスクリプトの標準出力はバッファリングされるため,hoge.rbの処理に時間がかかる場合,長い時間立った後に,まとめてhoge.rbの出力をどかっと渡されるようになる. (受け取ったプログラムは,それを1行ずつ処理することはできるけれど) これは標準出力がバッファリングされているのが原因なので,バッファリングしないようにす

    an-ironic-man
    an-ironic-man 2013/01/30
    STDOUT.sync = trueで、標準出力がバッファされずにリアルタイムで出力されるようになる。STDERRじゃなくてもいいのか。