Podproces Pythona readlines () zawiesza się
Zadaniem, które staram się wykonać, jest strumieniowanie pliku ruby i wydrukowanie wyniku. (UWAGA: Nie chcę drukować wszystkiego naraz)
main.py
from subprocess import Popen, PIPE, STDOUT
import pty
import os
file_path = '/Users/luciano/Desktop/ruby_sleep.rb'
command = ' '.join(["ruby", file_path])
master, slave = pty.openpty()
proc = Popen(command, bufsize=0, shell=True, stdout=slave, stderr=slave, close_fds=True)
stdout = os.fdopen(master, 'r', 0)
while proc.poll() is None:
data = stdout.readline()
if data != "":
print(data)
else:
break
print("This is never reached!")
ruby_sleep.rb
puts "hello"
sleep 2
puts "goodbye!"
Problem
Przesyłanie strumieniowe pliku działa poprawnie. Wyjście hello / goodbye jest drukowane z 2-sekundowym opóźnieniem. Dokładnie tak, jak powinien działać skrypt. Problem polega na tym, że readline () zawiesza się w końcu i nigdy nie kończy pracy. Nigdy nie dotarłem do ostatniego wydruku.
Wiem, że jest tu wiele pytań, takich jak ten stackoverflow, ale żaden z nich nie rozwiązał problemu. Nie jestem w tym wszystkim w podprocesie, więc proszę dać mi bardziej praktyczną / konkretną odpowiedź.
pozdrowienia
edytować
Napraw niezamierzony kod. (nic wspólnego z rzeczywistym błędem)