2009-12-20 7 views
5

Ich bin sehr neu in der Programmierung, also entschuldige ich mich im Voraus, wenn meine Frage zu albern ist.Warum verhält sich dieser Code in Python3.1 anders als in 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) 

Ausführen diesen Code in Python 2.6 drucken Buchstaben a, b, c, d, jede Zeile der Ausgabe erscheint nach einer Sekunde. Dies ist das erwartete Verhalten. In Python 3.1 wird die Ausführung jedoch in Zeile output=p.stdout.readline() blockiert. Wie behebt man dies für Python 3.1?

+0

, was genau passiert, wenn die Ausführung gesperrt ist? Hast du einen Fehler, den du anzeigen kannst? – Ben

+0

keine Fehler, nur Eingabeaufforderungen; Dieser Code wurde im Terminal-Fenster –

+5

ausgeführt. Bei einer Schätzung könnte es Unterschiede in der Pufferung sein; ändert sich etwas, wenn Sie nach dem Schreiben einen Aufruf an p.stdin.flush hinzufügen? –

Antwort

3

Scheint ein Unterschied in der Pufferung zu sein. Hinzufügen eines p.stdin.flush() Anrufs löste das Problem. (Siehe die Kommentare oben).

Community Wiki wie ich keine Credits für diese Antwort verdienen, aber einige Antwort muss als akzeptiert markiert werden.

[@Geo Pop:. Bitte „akzeptieren“ diese Frage, da es offenbar richtig ist]