我在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,它工作得很好。
发布于 2010-12-16 09:17:45
这是因为输出被缓冲了。
您应该在每次写入后添加sys.stdout.flush()
发布于 2010-12-16 09:16:53
听起来不同之处在于stdout在空闲状态下会被自动刷新。为了提高效率,编程语言通常在写入屏幕之前保存大量的打印调用,这是一个缓慢的过程。
这里有另一个问题,它有您需要的答案:How to flush output of Python print?
https://stackoverflow.com/questions/4456581
复制相似问题