長時間実行しているシェルコマンドの結果を出力できるようにするにはどうしたらよいでしょうか?Rubyは長時間実行しているシェルコマンドのstdoutを出力します
は現在、私は
私は概念的に何をしたいのか
long_running_shell_command
を置く(私は唯一のコマンドが終了した後に見ることができる)、これを行うためにputs_immediately
long_running_shell_command
される必要があります
長時間実行しているシェルコマンドの結果を出力できるようにするにはどうしたらよいでしょうか?Rubyは長時間実行しているシェルコマンドのstdoutを出力します
は現在、私は
私は概念的に何をしたいのか
long_running_shell_command
を置く(私は唯一のコマンドが終了した後に見ることができる)、これを行うためにputs_immediately
long_running_shell_command
される必要があります
はSTDOUT
に出力をリダイレクト:シェルコマンドで動作するように
# waits a second, prints the current directory's contents, waits 5 seconds
system('sleep 1; ls; sleep 5', out: STDOUT)
私のお気に入りの方法はそうのようなものです:
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ループでコマンドを折り返し、コマンドが完了するまで繰り返し実行します。
シェルコマンドをどのように実行していますか?選択した実行スタイルは、データストリーム(連続的に出力される)またはバッファされたデータ(一度にすべて出力される)を取得するかどうかを指定します。 – eiko