Rubyから(シェル)コマンドを実行して出力を表示するだけでなくキャプチャする方法はありますか? 多分いくつかの宝石の助けを借りて?
表示とは、最後に表示するのではなく、表示されるとおりに表示することを意味します。したがって、ユーザーは、遅いコマンドを実行しているときに何が起こっているかについてのフィードバックを得ることができます。
Rubyから(シェル)コマンドを実行して出力を表示するだけでなくキャプチャする方法はありますか? 多分いくつかの宝石の助けを借りて?
表示とは、最後に表示するのではなく、表示されるとおりに表示することを意味します。したがって、ユーザーは、遅いコマンドを実行しているときに何が起こっているかについてのフィードバックを得ることができます。
次のようにシステムコールを実行できます。
`sleep --help`
または、このように
system "sleep --help"
または
%x{ sleep --help }
system
出力を出力して or を返すtrue
場合、nil
他の 2 つのメソッドは出力を返します。
PSああ。リアルタイム表示についてです。
そう。次のようなものを使用できます。
system("ruby", "-e 100.times{|i| p i; sleep 1}", out: $stdout, err: :out)
データをリアルタイムで出力して変数に保存するには:
output = []
r, io = IO.pipe
fork do
system("ruby", "-e 3.times{|i| p i; sleep 1}", out: io, err: :out)
end
io.close
r.each_line{|l| puts l; output << l.chomp}
#=> 0
#=> 1
#=> 2
p output
#=> ['0', '1', '2']
または使用popen
output = []
IO.popen("ruby -e '3.times{|i| p i; sleep 1}'").each do |line|
p line.chomp
output << line.chomp
end
#=> '0'
#=> '1'
#=> '2'
p output
#=> ['0', '1', '2']