睡眠和不换行打印?

4
如果我运行这段代码:
for x in range(10):
    time.sleep(1)
    print("a")

它将会按照预期执行。但是如果我运行以下内容:
for x in range(10):
    time.sleep(1)
    print("a", end="")

它会等待整整10秒钟,然后打印10个a

我该如何防止这种情况发生?


2
绝对不是库的错误。首先假设你自己的代码有问题(因为它经过的测试要少得多)。问题在于stdout是行缓冲的 - Jonathon Reinhart
@JonathonReinhart,那肯定是很合理的,但这种行为看起来非常不稳定。必须刷新stdout似乎并不太符合“Python”的风格。虽然可能很罕见,但我以前遇到过标准Python库中的错误(2.6中的zipfile,显然是臭名昭著的)。 - tkbx
1个回答

8

在打印后刷新stdout。

import time
import sys

for x in range(10):
    time.sleep(1)
    print("a", end="")
    sys.stdout.flush()

Python 3.3版本的print函数有一个可选的flush参数。在Python 3.3及以上版本中,您可以按照以下方式编写代码。

import time

for x in range(10):
    time.sleep(1)
    print("a", end="", flush=True)

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