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

pet*_*hor 7 python ipython

我想在我的函数循环期间打印一些调试语句,我使用IPython来调用该函数.让一个示例函数为:

def test_print():
    import time
    for i in range(5):
        time.sleep(2)
        print i,  time.time()
Run Code Online (Sandbox Code Playgroud)

结果如下:

0 1372337149.84
1 1372337151.84
2 1372337153.85
3 1372337155.85
4 1372337157.85
Run Code Online (Sandbox Code Playgroud)

我希望每行都打印出来,然后等待2秒钟.但行为如下.我首先观察到:

0 1372337149.84
1 
Run Code Online (Sandbox Code Playgroud)

然后,在2秒后,我观察1下一行的时间戳和id,即2.我终于看到了最后一张时间戳.我无法弄清楚为什么它表现得像这样,而不是一次一行.有什么想法吗?我是否需要特殊的刷新功能来打印等待打印的内容?

Aya*_*Aya 11

我从来没有使用过IPython,但它应该足以在每个print语句后刷新stdout .

这样的事情应该有效......

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

  • 但是,`print`会自动添加新行,所以它应该已经刷新了. (4认同)
  • @Elazar这是一个[比这更复杂](http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in- the-format-strin),所以它取决于`sys.stdout.isatty()`.还值得注意的是`python`有一个`-u`选项来使用无缓冲的stdout. (3认同)