首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用popen3实现rake任务的实时输出

用popen3实现rake任务的实时输出
EN

Stack Overflow用户
提问于 2019-02-20 10:15:38
回答 1查看 248关注 0票数 1

在获得实时输出的同时,从popen3块中运行rake任务似乎是不可能的。在耙任务结束时,所有的线都会同时出现。我试图通过popen3块从rake任务获得实时输出

代码语言:javascript
复制
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任务

  1. 创建一个任务如下
代码语言:javascript
复制
task :print_and_wait do
  puts 'A'
  sleep 1
  puts 'B'
  sleep 1
  putc 'C'
end
  1. 从命令行调用任务

$ rake print_and_wait输出3行(A、B和C),中间暂停一秒钟。不出所料

概念2的证明: popen3

  1. 创建一个shell脚本
代码语言:javascript
复制
$ cat print_and_wait
#!/bin/bash
echo 'A'
sleep 1
echo 'B'
sleep 1
echo 'C'
  1. 创建一张红宝石纸条
代码语言:javascript
复制
$ 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'
  1. 运行红宝石脚本

$ ruby print_and_wait.rb按预期工作:输出3行,中间暂停一秒钟。

在不起作用的地方

  • 编辑ruby脚本print_and_wait.rb并将exec_async './print_and_wait'更改为exec_async 'rake print_and_wait'
  • 运行$ ruby print_and_wait.rb
  • 没有输出,3秒后,所有3行都同时打印。

我尝试了几个组合,但始终无法使它像预期的那样工作。你知道为什么这不管用吗?这是个虫子吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 10:31:21

在rake任务开始时添加$stdout.sync = true解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54783830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档