Python3 sleep()问题

时间:2010-12-16 01:12:20

标签: python python-3.x sleep flush

我在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 个答案:

答案 0 :(得分:21)

这是因为输出正在缓冲。

每次写入后都应添加sys.stdout.flush()

答案 1 :(得分:5)

听起来不同的是stdout会自动在IDLE中刷新。为了提高效率,编程语言在写入屏幕之前通常会节省大量的打印调用,这是一个缓慢的过程。

这是另一个有你需要答案的问题: How to flush output of Python print?