在获得实时输出的同时,从popen3块中运行rake任务似乎是不可能的。在耙任务结束时,所有的线都会同时出现。我试图通过popen3块从rake任务获得实时输出
cmd = 'rake perform_a_task'
Open3::popen3(cmd) do |std_in, std_out, std_err|
std_out.each_line do |line|
puts line
end
end如何繁殖
概念证明: rake任务
task :print_and_wait do
puts 'A'
sleep 1
puts 'B'
sleep 1
putc 'C'
end$ rake print_and_wait输出3行(A、B和C),中间暂停一秒钟。不出所料
概念2的证明: popen3
$ cat print_and_wait
#!/bin/bash
echo 'A'
sleep 1
echo 'B'
sleep 1
echo 'C'$ cat print_and_wait.rb
require 'open3'
def exec_async(cmd)
Open3::popen3(cmd) do |std_in, std_out, std_err|
std_out.each_line do |line|
puts line
end
end
end
exec_async './print_and_wait'$ ruby print_and_wait.rb按预期工作:输出3行,中间暂停一秒钟。
在不起作用的地方
exec_async './print_and_wait'更改为exec_async 'rake print_and_wait'$ ruby print_and_wait.rb我尝试了几个组合,但始终无法使它像预期的那样工作。你知道为什么这不管用吗?这是个虫子吗?
谢谢
发布于 2019-02-20 10:31:21
在rake任务开始时添加$stdout.sync = true解决了这个问题。
https://stackoverflow.com/questions/54783830
复制相似问题