Python3 sleep() 问题
我在写一个简单的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()
。