为什么这段代码在Python3.1和Python2.6中表现不同?

5

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

#!/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中纠正这个问题?


执行被阻塞时会发生什么?你有错误可以展示吗? - Ben
请将以下与编程有关的内容从英语翻译成中文。仅返回翻译后的文字内容,不要包含任何错误或提示信息;该代码是在终端窗口执行的。 - Geo Pop
5
猜测可能是缓冲区的差异;如果在写入后添加一个对p.stdin.flush的调用,会发生什么变化? - user25148
1
非常感谢,你解答了我的问题;加上 p.stdin.flush() 解决了我的问题。 - Geo Pop
1个回答

3
似乎存在缓冲区差异。添加p.stdin.flush()函数调用可以解决问题。(请参见上文评论)。本答案由社区维护,我不应得到任何荣誉,但需要标记此答案为已采纳。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接