Ciągle czytaj z STDOUT procesu zewnętrznego w Ruby

Chcę uruchomić mikser z linii poleceń za pomocą skryptu ruby, który następnie przetworzy dane wyjściowe podane przez blender po linii, aby zaktualizować pasek postępu w GUI. Nie jest ważne, aby mikser był zewnętrznym procesem, którego standardowe wyjście muszę przeczytać.

Wydaje mi się, że nie jestem w stanie złapać blendera, który normalnie wyświetla się w powłoce, gdy proces blendera nadal działa, i wypróbowałem kilka sposobów. Zawsze wydaje mi się, że mam dostęp do standardowego mikserapo Blender zakończył działanie, nie podczas gdy nadal działa.

Oto przykład nieudanej próby. Otrzymuje i drukuje pierwszych 25 linii wyjścia miksera, ale dopiero po zakończeniu procesu miksera:

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}

Edytować:

Aby uczynić to trochę jaśniejszym, polecenie wywołujące mikser odsyła strumień wyjściowy w powłoce, wskazując postęp (część 1-16 zakończona itp.). Wygląda na to, że każde wywołanie „pobiera” dane wyjściowe jest blokowane do momentu zamknięcia miksera. Problem polega na tym, jak uzyskać dostęp do tego wyjścia, gdy blender nadal działa, ponieważ blender drukuje dane wyjściowe do powłoki.

questionAnswers(4)

yourAnswerToTheQuestion