2013-06-27 28 views
7

我想在我的函數循環中打印一些調試語句,並使用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 

然後,2秒後我觀察1時間戳和下一行,這是2的ID。我最後觀察了最後一次印章。我無法弄清楚爲什麼它的行爲是這樣的,而不是一次一行。有什麼想法嗎?我是否需要特殊的清洗功能來打印正在等待打印的內容?

+0

它正常工作對我來說。 – Doorknob

+0

使用CPython它的行爲如預期。適用於Linux和Windows。 – Elazar

+0

我使用Canopy 1.0.1。它有Python 2.7.3 64位。 – petrichor

回答

11

我從來沒有使用IPython,但它應該足以在每個print語句後刷新標準輸出。

像這樣的東西應該工作...

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

但是,'print'會自動添加新行,所以它應該已經被刷新了。 – Elazar

+1

@Elazar在CPython中,也許吧。也許IPython的行爲有所不同。 – Aya

+0

它現在可以工作,非常感謝。 – petrichor