我有以下非常简单的代码:
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
答案 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()
已被删除。在这种情况下无需使用它。