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

5 投票
1 回答
582 浏览
提问于 2025-04-15 17:13

我刚开始学习编程,所以如果我的问题听起来很傻,我先说声抱歉。

#!/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 个回答

3

看起来是缓冲的问题。加上一个 p.stdin.flush() 的调用解决了这个问题。(具体可以看看上面的评论)。

这是社区的知识库,我不想因此获得任何荣誉,但这个问题需要有人标记为已解决。

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

撰写回答