我在Python 3.1上编写了一个简单的程序,我偶然发现了这个:
如果我在IDLE上运行它按预期工作 - 打印"Initializing."
然后添加两个点,每秒一个,然后等待输入。
from time import sleep
def initialize():
print('Initializing.', end='')
sleep(1)
print(" .", end='')
sleep(1)
print(" .", end='')
input()
initialize()
问题是,当我双击.py来执行文件时,它会在python.exe而不是pythonw.exe上运行,并且会发生奇怪的事情:它加入所有sleep()
次,即让我等待2秒钟,然后立即打印整个字符串Initializing. . .
。为什么会这样?有没有办法避免终端发生这种情况?如果我在windows和linux中使用IDLE,它工作正常。
答案 0 :(得分:21)
这是因为输出正在缓冲。
每次写入后都应添加sys.stdout.flush()
答案 1 :(得分:5)
听起来不同的是stdout会自动在IDLE中刷新。为了提高效率,编程语言在写入屏幕之前通常会节省大量的打印调用,这是一个缓慢的过程。
这是另一个有你需要答案的问题: How to flush output of Python print?