你如何在ruby中“尾随”命令的输出

时间:2013-03-06 03:47:21

标签: ruby shell

我的意思是尾部是在运行时捕获输出的命令而不是仅仅在它执行结束时获取命令。例如,如果你执行一个长时间运行的命令,它将看起来像这样:

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

我想做的是通过ruby运行命令,并在它发生时看到它的输出。

1 个答案:

答案 0 :(得分:0)

Backticks将等待整个命令完成,然后将其输出作为单个字符串返回,正如您所观察到的那样。要获得产生的输出,请尝试Open3::popen2e

这是一个使用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