Python sous-processus readlines() se bloque

La tâche, j'ai essayer de faire est de diffuser un fichier ruby et imprimer le résultat. (NOTE: je ne veux pas imprimer tout à la fois)

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

Problème

Streaming le fichier fonctionne très bien. Le bonjour/au revoir de sortie est imprimée avec les 2 secondes de retard. Exactement comme le script devrait fonctionner. Le problème est que readline() se bloque à la fin, et jamais ne se ferme. Je n'ai jamais atteindre la dernière impression.

Je sais il y a beaucoup de questions de ce genre ici un stackoverflow mais non d'eux m'a permis de résoudre le problème. Je ne suis pas que dans l'ensemble du processus secondaire chose donc merci de me donner la main sur/réponse concrète.

Ce qui concerne

modifier

Fixer involontaire code. (rien à voir avec l'erreur réelle)

  • Pas sûr si vous avez une erreur de saisie lors de coller le code dans votre question, ou si le problème est authentique. Me semble que le if doit être mis en retrait, de sorte qu'il est à l'intérieur de la boucle.
  • Merci pour remarquer. C'est une faute de frappe quand j'ai collé le code. C'est corrigé maintenant. Désolé à ce sujet.
  • Je ne suis pas sûr, mais ce n'est pas votre problème très similaire à celle de la stackoverflow.com/questions/8495794/... ?
InformationsquelleAutor vermin | 2012-09-14