【发布时间】:2013-06-27 12:51:41
【问题描述】:
我想在我的函数循环期间打印一些调试语句,我使用 IPython 调用该函数。让一个示例函数为:
def test_print():
import time
for i in range(5):
time.sleep(2)
print i, time.time()
结果如下:
0 1372337149.84
1 1372337151.84
2 1372337153.85
3 1372337155.85
4 1372337157.85
我希望打印每一行,然后等待 2 秒。但行为如下。我首先观察:
0 1372337149.84
1
然后,2 秒后,我观察到1 的时间戳和下一行的 id,即2。我终于观察到了最后一个时间戳。我不明白为什么它的行为是这样的,而不是一次一行。有什么想法吗?我是否需要特殊的刷新功能来打印等待打印的内容?
【问题讨论】:
-
它对我来说正常工作。
-
使用 CPython,它的行为符合预期。适用于 Linux 和 Windows。
-
我使用的是 Canopy 1.0.1。它有 Python 2.7.3 64 位。
-
我在 Linux 上使用 CPython 2.6.5,它的行为符合预期。
-
@AshwiniChaudhary 可能取决于您是从 CLI 还是 GUI 运行它。如果它是从 GUI 运行的,它可能会将 stdout 重定向到 tty 以外的东西,这将使流完全缓冲而不是行缓冲。