Ruby不断输出长时间运行的shell命令的标准输出
问题描述:
随着输出可用,我该如何连续输出长时间运行的shell命令的结果?Ruby不断输出长时间运行的shell命令的标准输出
目前我需要做到这一点(我可以命令完成后,只看到)
提出
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)
答
我用shell命令工作喜欢的方式是像这样:
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循环中,并在命令完成之前重复执行一组命令。
你怎么执行你的shell命令?您选择的执行风格决定您是否会获得数据流(可持续输出)或缓冲数据(一次打印)。 – eiko