我想通过 Ruby 脚本从命令行运行 blender,然后它将逐行处理 blender 给出的输出,以更新 GUI 中的进度条。Blender 是我需要读取其标准输出的外部进程并不重要。
我似乎无法捕获进度消息搅拌器通常打印到 shell 时,搅拌器进程仍在运行,我已经尝试了几种方法。我似乎总是访问搅拌机的标准输出 之后搅拌机已经退出,而不是当它仍然运行。
这是一个失败的尝试的例子。它确实获取并打印出搅拌机输出的前25行,但只有在搅拌机过程结束之后:
blender = nil
t = Thread.new do
blender = open "| blender -b mball.blend -o //renders/ -F JPEG -x 1 -f 1"
end
puts "Blender is doing its job now..."
25.times { puts blender.gets}
编辑:
为了更清楚一些,调用 blender 的命令返回 shell 中的输出流,指示进度(第1-16部分完成等)。似乎任何对“获取”输出的调用都会被阻塞,直到搅拌器退出。问题是如何在搅拌器仍在运行时访问这个输出,因为搅拌器将输出打印到 shell 中。