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

时间:2017-04-04 13:02:39

标签: ruby shell

当输出可用时,如何连续输出长时间运行的shell命令的结果?

目前我需要这样做(我只能在命令完成后看到)

  

long_running_shell_command

我想在概念上做什么

  

puts_immediately long_running_shell_command

2 个答案:

答案 0 :(得分:0)

将输出重定向到STDOUT

# waits a second, prints the current directory's contents, waits 5 seconds
system('sleep 1; ls; sleep 5', out: STDOUT)

答案 1 :(得分:0)

我最喜欢使用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循环中并重复执行一组命令直到命令完成。