2009-12-20 17 views
5

Programlama konusunda çok yeniyim, bu yüzden soruma çok aptalca özür dilerim. Python 2.6 baskılar harfler a, b, c, d bu kodu işlem yapılmasıBu kod neden Python3.1'de Python2.6'dan farklı davranıyor?

#!/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) 

, her çıktı hattı saniye sonra görülmektedir. Bu beklenen bir davranış. Ancak Python 3.1 uygulamasında satır output=p.stdout.readline() numaralı satırda engellenir. Python 3.1 için bunu nasıl düzeltebilirim?

+0

neyi yürütme engellendiğinde tam olur? Gösterebildiğin bir hata var mı? – Ben

+0

hata değil, sadece giriş için istekte bulunur; Bu kod, –

+5

numaralı terminal penceresinde gerçekleştirilmiştir. Bir tahminte, arabelleğe almada farklılıklar olabilir; yazdıktan sonra p.stdin.flush'a bir çağrı eklerseniz bir şey değişir mi? –

cevap

3

Arabelleğe almada bir fark görünüyor. Bir p.stdin.flush() çağrı eklemek sorunu çözdü. (Yukarıdaki yorumlara bakın).

Topluluk wiki, bu cevap için hiçbir krediyi hak etmediği için, ancak bazı cevapların kabul edilmek üzere işaretlenmesi gerekiyor.

[@Geo Pop:. Görünüşte doğru olarak bu soruya, "kabul" Lütfen]

İlgili konular