Líneas de lectura de subproceso de Python () se cuelgan

La tarea que trato de realizar es transmitir un archivo ruby ​​e imprimir el resultado. (NOTA: No quiero imprimir todo a la vez)

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!"

Problema

Streaming el archivo funciona bien. La salida de saludo / despedida se imprime con el retraso de 2 segundos. Exactamente como el script debería funcionar. El problema es que readline () se bloquea al final y nunca se cierra. Nunca llego a la última impresión.

Sé que hay muchas preguntas como esta aquí, un flujo de pila, pero ninguna de ellas me hizo resolver el problema. No estoy tan involucrado en el subproceso, así que por favor, dame una respuesta más práctica / concreta.

Saludos

editar

Corrige el código no deseado. (nada que ver con el error real)

Respuestas a la pregunta(4)

Su respuesta a la pregunta