Kontinuierliches Lesen von STDOUT des externen Prozesses in Ruby

Ich möchte Blender von der Befehlszeile aus über ein Ruby-Skript ausführen, das dann die Ausgabe von Blender zeilenweise verarbeitet, um eine Fortschrittsanzeige in einer GUI zu aktualisieren. Es ist nicht wirklich wichtig, dass der Mixer der externe Prozess ist, dessen Standard ich lesen muss.

Ich kann die Statusmeldungen, die Blender normalerweise an die Shell ausgibt, scheinbar nicht abfangen, wenn der Blender-Prozess noch ausgeführt wird, und ich habe einige Möglichkeiten ausprobiert. Ich scheine immer auf den Standardmixer zuzugreifennach dem Mixer hat gekündigt, nicht solange er noch läuft.

Hier ist ein Beispiel für einen fehlgeschlagenen Versuch. Die ersten 25 Zeilen der Ausgabe von Blender werden abgerufen und gedruckt, jedoch erst, nachdem der Blender-Prozess beendet wurde:

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}

Bearbeiten:

Um es ein wenig klarer zu machen, gibt der Befehl, der Blender aufruft, einen Strom von Ausgaben in der Shell zurück, der den Fortschritt anzeigt (Teil 1-16 abgeschlossen usw.). Es scheint, dass jeder Aufruf zum "Erhalten" der Ausgabe blockiert wird, bis der Mixer beendet wird. Das Problem ist, wie Sie auf diese Ausgabe zugreifen können, während der Mixer noch ausgeführt wird, da der Mixer die Ausgabe in die Shell druckt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage