python 2 stdin无法读取单独的行

时间:2016-08-26 08:19:54

标签: python io buffer stdin python-2.x

我有以下非常简单的代码:

from __future__ import print_function
import sys

for line in sys.stdin:
    print("hello!")
    sys.stdout.flush()

当我运行它时,我希望输入一行,然后立即看到hello!打印出来,之后我可以输入另一行。

当我使用py -3运行时,我得到了预期的结果:

py -3 test.py
asdf
hello!
asdf
hello!
asdf
hello!
^C

当我使用py -2运行时,它不会打印hello!,除非我发送ctrl-Z:

py -2 test.py
asdf
asdf
asdf
^Z
hello!
hello!
hello!
asdf
^Z
hello!
^Z

我在Windows上使用Python 2.7.12和Linux(使用ctrl-D而不是ctrl-Z)在Python 2.6.6上运行此测试。

如何让Python 2的行为与Python3的行为相匹配?

编辑:

在repl.it上运行Python 3示例:https://repl.it/Cs6n/0

在repl.it上打破Python 2示例:https://repl.it/Cs7C/0

1 个答案:

答案 0 :(得分:3)

回答你的问题Disable output buffering。 (接受答复的第4条评论)。你的工作代码应该是这样的:

from __future__ import print_function
import sys

while True:
    line = sys.stdin.readline()
    print("hello!")

在python 2.7.11中完美运行

修改: 最后一行sys.stdout.flush()已被删除。在这种情况下无需使用它。