Ruby不断输出长时间运行的shell命令的标准输出

问题描述:

随着输出可用,我该如何连续输出长时间运行的shell命令的结果?Ruby不断输出长时间运行的shell命令的标准输出

目前我需要做到这一点(我可以命令完成后,只看到)

提出long_running_shell_command

我想从概念上做的是

puts_immediately long_running_shell_command

+0

你怎么执行你的shell命令?您选择的执行风格决定您是否会获得数据流(可持续输出)或缓冲数据(一次打印)。 – eiko

输出重定向到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循环中,并在命令完成之前重复执行一组命令。