Lectura continua de STDOUT del proceso externo en Ruby

Quiero ejecutar Blender desde la línea de comandos a través de un script Ruby, que luego procesará la salida dada por Blender línea por línea para actualizar una barra de progreso en una GUI. No es realmente importante que Blender sea el proceso externo cuya versión estándar necesito leer.

Parece que no puedo captar los mensajes de progreso que blender normalmente imprime en el shell cuando el proceso de blender todavía se está ejecutando, y lo he intentado de varias maneras. Siempre me parece que accedo al stdout de blenderdespués La licuadora ha dejado de funcionar, no mientras todavía esté funcionando.

Aquí hay un ejemplo de un intento fallido. Obtiene e imprime las primeras 25 líneas de la salida de Blender, pero solo después de que el proceso de Blender haya finalizado:

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}

Editar:

Para hacerlo un poco más claro, el comando que invoca a blender devuelve una secuencia de salida en el shell, que indica el progreso (parte 1-16 completada, etc.). Parece que cualquier llamada para "obtener" la salida se bloquea hasta que se cierra Blender. El problema es cómo obtener acceso a esta salida mientras Blender aún se está ejecutando, ya que Blender imprime su salida en shell.

Respuestas a la pregunta(4)

Su respuesta a la pregunta