Ruby:实时打印系统输出?

时间:2014-05-08 19:13:41

标签: ruby bash

我有一个ruby rake任务,通过以下方式调用bash脚本:

Open3.popen('/path/file_converter.sh', file_list, output_format)

该bash脚本在处理时将日志输出到命令行(从30秒到5小时)

当我调用rake任务时,bash的输出将返回到命令行,但仅在整个脚本运行后作为一条大消息返回。任何人都知道一种方法来管道命令行输出直接导致ruby输出吗?

2 个答案:

答案 0 :(得分:2)

将输出放入文件中。并在后台运行该过程,创建一个新线程。之后你可以解析文件。

class FileConverter
  def initialize
    @output_file = '/tmp/something.txt'
    output_format = 'foo'
    file_list = 'bar foo something'
    @child = Thread.new do
      `/path/file_converter.sh #{file_list} #{output_format} 2>&1 >#{@output_file}`
    end
  end

  def data
    File.readlines(@output_file)
  end

  def parse
    while @child.alive?
      # parse data # TODO: need to implement real parsing
      sleep 0.5
    end
  end
end

fc = FileConverter.new
fc.parse

答案 1 :(得分:1)

根据documentation,您应该能够使用块中给出的输出流:

Open3.popen3('/path/file_converter.sh', file_list, output_format) do |_,out,_,_|
  out.each_line do |line|
    puts line
  end
end