【发布时间】:2016-06-24 01:18:23
【问题描述】:
我有下一个代码
def execute_bash(cmd)
puts "Executing: [#{cmd}]"
exit_code = Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
stdin.close
stdout.each { |line| puts line }
stdout.close
stderr.each { |line| puts line }
stderr.close
wait_thr.value.exitstatus
end
return exit_code
end
我使用此函数运行的命令是 vagrant up,它会产生大量输出。我有很多食谱,所以我需要逐行实时监控它的输出。
我还有另一个脚本可以确保之前的脚本运行良好并且没有崩溃。所以我有另一个脚本,它以与以前相同的方式运行 bash 命令。所以我喜欢跑步(在第二个脚本中):
execute_bash "./vagrant_up.rb"
这样的后果导致我死锁或其他东西:在某些时候输出停止。我可以等待很长时间,但它不会继续。
当我在控制台中运行 vagrant - 一切都很好。
在另一个popen3中运行带有popen3的ruby脚本有问题吗? 是否有处理popen3中死锁的正确方法(如果是死锁,我不确定)?
【问题讨论】: