6
不断从Ruby中的外部进程的STDOUT中读取
我想通过ruby脚本从命令行运行Blender,然后将逐行处理Blender给出的输出以更新GUI中的进度条。搅拌器是我需要阅读其标准输出的外部过程并不是很重要。 当Blender进程仍在运行时,我似乎无法捕获Blender通常打印到Shell的进度消息,并且我尝试了几种方法。我似乎总是在搅拌器退出后(而不是在它仍在运行时)访问搅拌器的标准输出。 这是失败尝试的示例。它确实获取并打印了Blender输出的前25行,但仅在Blender进程退出后: 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} 编辑: 为了更清楚一点,调用搅拌器的命令在shell中返回输出流,指示进度(第1-16部分已完成,等等)。似乎所有对“获取”输出的调用都被阻止,直到搅拌机退出为止。问题是当Blender仍在运行时如何访问此输出,因为Blender会将其输出打印到Shell。