如何在IPython中刷新打印的语句


问题内容

我想在函数循环中打印一些调试语句,并使用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

然后,两秒钟后,我观察的时间戳1和下一行的ID,即2。我终于观察到最后一个时间戳。我不知道为什么它会像这样而不是一次显示一行。有什么想法吗?我需要特殊的冲洗功能来打印正在等待打印的内容吗?


问题答案:

我从未使用过IPython,但是在每个print语句之后刷新标准输出就足够了。

这样的事情应该起作用…

def test_print():
    import time
    import sys
    for i in range(5):
        time.sleep(2)
        print i,  time.time()
        sys.stdout.flush()