为什么Python3.1中的代码与Python2.6中的代码行为不同?

为什么Python3.1中的代码与Python2.6中的代码行为不同?,python,subprocess,stdout,stdin,popen,Python,Subprocess,Stdout,Stdin,Popen,我对编程非常陌生,所以如果我的问题太傻,我会提前道歉 #!/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() p

我对编程非常陌生,所以如果我的问题太傻,我会提前道歉

#!/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)
在Python2.6中执行此代码会打印字母a、b、c、d,每行输出都会在一秒钟后显示。这是预期的行为。 但在Python3.1中,执行被阻塞在第
output=p.stdout.readline()
行。
如何在Python3.1中更正此问题

似乎在缓冲方面有所不同。添加
p.stdin.flush()
调用解决了问题。(见以上评论)

社区维基,因为我不应该得到这个答案的学分,但一些答案需要被标记为接受


[@Geo Pop:请“接受”这个问题,因为它显然是正确的。]

执行被阻止时会发生什么?您是否有可以显示的错误?不是错误,只是提示输入;这段代码是在终端窗口中执行的,可能是缓冲的不同;如果你在写完后给p.stdin.flush打个电话,会有什么变化吗?非常感谢,你回答了我的问题;添加p.stdin.flush()可以解决我的问题