Python3 sleep()问题

rod*_*dds 12 python sleep flush python-3.x

我在Python 3.1上编写了一个简单的程序,我偶然发现了这个:

如果我在IDLE上运行它,它按预期工作 - 打印"Initializing."然后添加两个点,每秒一个,并等待输入.

from time import sleep

def initialize():
    print('Initializing.', end='')
    sleep(1)
    print(" .", end='')
    sleep(1)
    print(" .", end='')
    input()

initialize()
Run Code Online (Sandbox Code Playgroud)

问题是,当我双击.py来执行文件时,它运行在python.exe而不是pythonw.exe上,并发生奇怪的事情:它一直加入,sleep()即让我等待2秒,然后打印整个字符串Initializing. . .一下子.为什么会这样?有没有办法避免终端发生这种情况?如果我在windows和linux中使用IDLE,它工作正常.

Joh*_*ooy 21

这是因为输出正在缓冲.

你应该sys.stdout.flush()在每次写入后添加一个

  • 使用Python 3的`print`函数,你也可以使用`flush`参数,例如`print(".",end ='',flush = True)` (9认同)
  • 4年后,我发现我从未真正将此作为一个公认的答案. (2认同)

leo*_*ger 5

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

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