1

テールとは、実行の最後にコマンド出力を取得するのではなく、実行中にコマンド出力をキャプチャすることです。たとえば、長時間実行するコマンドを実行すると、次のようになります。

# Run command
puts `ey deploy`
# Nothing happening for a while....
# ...
# Now see all of the output at once.

私がやりたいのは、ルビーを介してコマンドを実行し、それが起こっているときに出力を確認することです。

4

1 に答える 1

2

あなたが観察したように、バックティックはコマンド全体が完了するのを待ってから、その出力を単一の文字列として返します。生成されたとおりに出力を取得するには、次を試してくださいOpen3::popen2e

次の例では、各行間で 1 秒間スリープする bash ループを使用して、このインターフェイスのインクリメンタル ストリーミングの性質を示します。

require 'open3'

CMD = %{for ((i=0; i<4; i++)); do echo $i; sleep 1; done}

Open3.popen2e('bash', '-c', CMD) do |i,oe,t|
  oe.each { |line| puts line }
end
于 2013-03-06T04:52:00.453 に答える