Задача, которую я пытаюсь выполнить, - это поток рубинового файла и распечатка вывода. ( ПРИМЕЧАНИЕ: я не хочу распечатывать все сразу)
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!"
Проблема
Поток файлов работает нормально. Выход приветствия/прощания печатается с задержкой в 2 секунды. Точно как script должен работать. Проблема в том, что readline() зависает в конце и никогда не завершает работу. Я никогда не дошел до последней печати.
Я знаю, что здесь много вопросов, таких как stackoverflow, но не из-за них я решил решить эту проблему. Я не так во всей субпроцессе, поэтому, пожалуйста, дайте мне более практичный/конкретный ответ.
Привет
изменить
Исправить непреднамеренный код. (ничего общего с фактической ошибкой)