Python3的sleep()问题

12
我正在编写一个简单的 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,则可以正常工作。


2
我想它缓冲的原因是因为你还没有给它一个\n。通常使用end会指示你接下来要立即写入一些东西。 - Chris Morgan
2个回答

24
这是因为输出被缓冲了。 每次写完后应该加上sys.stdout.flush()

2
而且,四年过去了,我才注意到我从未将这个答案设置为被接受的答案。 - roddds
11
使用Python 3的print函数,你也可以使用flush参数,例如:print(" .", end='', flush=True) - tobias_k

5

听起来不同之处在于IDLE自动刷新stdout。为了提高效率,编程语言通常会保存一堆print调用,然后再写入屏幕,这是一个缓慢的过程。

这里有另一个问题,它有你需要的答案:如何刷新Python打印输出?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接