2009-12-20 13 views
5

Je suis très novice en programmation, je m'excuse d'avance si ma question est trop bête.Pourquoi ce code se comporte-t-il différemment dans Python3.1 que dans Python2.6?

#!/usr/bin/python2.6 
import subprocess, time 
p=subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
for i in 'abcd': 
    p.stdin.write(str.encode(i+'\n')) 
    output=p.stdout.readline() 
    print(output) 
    time.sleep(1) 

exécution de ce code dans le python 2.6 imprime des lettres a, b, c, d, chaque ligne de sortie apparaît après une seconde. C'est un comportement attendu. Mais dans Python 3.1 l'exécution est bloquée à la ligne . Comment corriger ceci pour Python 3.1?

+0

ce qui se passe exactement quand l'exécution est bloquée? Avez-vous une erreur que vous pourriez montrer? – Ben

+0

pas d'erreurs, seulement des invites pour l'entrée; ce code a été exécuté dans la fenêtre du terminal –

+5

En supposant qu'il pourrait y avoir des différences dans la mise en mémoire tampon; est-ce que quelque chose change si vous ajoutez un appel à p.stdin.flush après l'écriture? –

Répondre

3

Semble être une différence dans la mise en mémoire tampon. L'ajout d'un appel p.stdin.flush() a résolu le problème. (Voir les commentaires ci-dessus).

Wiki communautaire car je ne mérite aucun crédit pour cette réponse, mais certaines réponses doivent être marquées comme acceptées.

[@Geo Pop. S'il vous plaît « accepter » cette question, car il est apparemment correct]