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

时间:2009-12-20 19:34:26

标签: 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()  
    print(output)  
    time.sleep(1)

在Python 2.6中执行此代码会打印字母a,b,c,d,每行输出一秒钟后出现。这是预期的行为。 但是在Python 3.1中,执行在output=p.stdout.readline()行被阻止。 如何为Python 3.1更正此问题?

1 个答案:

答案 0 :(得分:3)

似乎是缓冲的差异。添加p.stdin.flush()电话可以解决问题。 (见上面的评论)。

社区维基因为这个答案我没有得到任何学分,但有些答案需要被标记为已接受。

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