Я хочу запустить blender из командной строки через ruby script, который затем обработает вывод, заданный blender по строкам, чтобы обновить индикатор выполнения в графическом интерфейсе. Это не очень важно, что блендер - это внешний процесс, для которого мне нужно читать.
Кажется, я не могу поймать сообщения о выполнении, которые blender обычно печатает в оболочке, когда процесс блендера все еще запущен, и я пробовал несколько способов. Кажется, я всегда получаю доступ к выходу блендера после того, как блендер ушел, а пока он все еще работает.
Вот пример неудачной попытки. Он получает и печатает первые 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}
Edit:
Чтобы сделать его более понятным, команда, вызывающая blender, возвращает поток вывода в оболочке, указывая на прогресс (часть 1-16 завершена и т.д.). Кажется, что любой вызов "получает" выход блокируется, пока блендер не уйдет. Проблема заключается в том, как получить доступ к этому выводу, пока блендер все еще запущен, так как блендер выводит его в оболочку.