我有一个ruby rake任务,通过以下方式调用bash脚本:
Open3.popen('/path/file_converter.sh', file_list, output_format)
该bash脚本在处理时将日志输出到命令行(从30秒到5小时)
当我调用rake任务时,bash的输出将返回到命令行,但仅在整个脚本运行后作为一条大消息返回。任何人都知道一种方法来管道命令行输出直接导致ruby输出吗?
答案 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