Python3 sleep() 问题

12 投票
2 回答
23071 浏览
提问于 2025-04-16 08:36

我在写一个简单的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 个回答

5

听起来,区别在于在IDLE中,标准输出(stdout)会自动刷新。为了提高效率,编程语言通常会先把很多打印的内容存起来,然后再一次性写到屏幕上,因为这样写屏幕的过程比较慢。

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

24

这是因为输出被暂时存储起来了。

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

撰写回答