2017-04-04 16 views
1

長時間実行しているシェルコマンドの結果を出力できるようにするにはどうしたらよいでしょうか?Rubyは長時間実行しているシェルコマンドのstdoutを出力します

は現在、私は

私は概念的に何をしたいのかlong_running_shell_command

を置く(私は唯一のコマンドが終了した後に見ることができる)、これを行うためにputs_immediately

long_running_shell_commandされる必要があります

+0

シェルコマンドをどのように実行していますか?選択した実行スタイルは、データストリーム(連続的に出力される)またはバッファされたデータ(一度にすべて出力される)を取得するかどうかを指定します。 – eiko

答えて

0

STDOUTに出力をリダイレクト:シェルコマンドで動作するように

# waits a second, prints the current directory's contents, waits 5 seconds 
system('sleep 1; ls; sleep 5', out: STDOUT) 
0

私のお気に入りの方法はそうのようなものです:

Open3.popen3 "shellcommand --args --more-args" do |stdin, stdout, stderr, thread| 
    while line = stdout.gets 
    puts line 
    end 
end 

コマンドを使用すると、入力、出力およびエラーストリームを提供します。 stdout.getsに電話して次の出力行(私のお気に入り)を取得するか、実際に即時性が必要な場合はstdout.getcを次の文字にすることができます。この関数は、入力が利用可能になるまで待機し、コマンドが完了するとnilを返します。したがって、一般的な方法は、whileループでコマンドを折り返し、コマンドが完了するまで繰り返し実行します。

関連する問題