2010-11-29 10 views
9

Getting output of system() calls in Rubyに似ていますが、私はシステムコマンドを実行していますが、この場合は実行時にコマンドからSTDOUTを出力する必要があります。実行中にruby system()コールのSTDOUTを取得するにはどうすればよいですか?

+0

それはあなたが特別な何かをしなければならないという好奇心旺盛だです。私の経験では、 'system'を使ってプログラムを実行すると、子プログラムのstdoutが親プログラムのstdoutに行きます。これはあなたが望むものです。 –

+0

これも動作する可能性があります:http://stackoverflow.com/questions/2215455/printing-to-screen-in-a-rake-task/2215986#2215986 –

答えて

13

リンクされた質問と同様に、答えはsystemを使用しないでください。systemはこれをサポートしていません。

今回は、backticksではなく、IO.popenを使用して、生成された入力を読み取るために使用できるIOオブジェクトを返します。

+7

ありがとう、 私は 'IO.popen( 'command_to_run '){| io | while(line = io.gets)は行末を置く} ' –

0

は、ここに私の解決策

def io2stream(shell, &block) 
    Open3.popen3(shell) do |_, stdout, stderr| 
    while line = stdout.gets 
     block.call(line) 
    end 

    while line = stderr.gets 
     block.call(line) 
    end 
    end 
end 

io2stream("ls -la", &lambda { |str| puts str }) 
関連する問題