Непрерывно читайте из STDOUT внешнего процесса в Ruby

Я хочу запустить blender из командной строки через скрипт ruby, который затем построчно будет обрабатывать вывод, полученный blender, для обновления индикатора выполнения в графическом интерфейсе. На самом деле не важно, что blender - это внешний процесс, чей стандартный вывод мне нужно прочитать.

Кажется, я не могу отловить сообщения о ходе выполнения, которые Blender обычно печатает в оболочку, когда процесс Blender все еще выполняется, и я попробовал несколько способов. Кажется, я всегда получаю доступ к стандартному блендеруafter Блендер завершил работу, пока он еще не запущен.

Вот пример неудачной попытки. Он получает и печатает первые 25 строк вывода blender, но только после завершения процесса 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}

Edit:

Чтобы сделать это немного понятнее, команда, вызывающая blender, возвращает поток вывода в оболочке, указывая прогресс (часть 1-16 завершена и т. Д.). Кажется, что любой вызов "получает" выход блокируется, пока блендер не выйдет. Вопрос заключается в том, как получить доступ к этому выводу, когда blender все еще работает, так как blender печатает его вывод в оболочку.

Ответы на вопрос(3)

Ваш ответ на вопрос