2011-09-18 121 views
9

我最近切換操作系統,並使用較新的Python(2.7)。在我的舊系統上,我曾經能夠瞬間打印。舉例來說,假設我有一個計算密集的循環:python實時打印功能

for i in range(10): 
    huge calculation 
    print i 

那麼作爲完成每一次迭代的代碼,它會打印i

不過,我目前的系統上,蟒蛇似乎緩存標準輸出,使該終端是空白幾分鐘,之後將其打印:

 
1 
2 
3 

在短時間內連續。然後,再過幾分鐘後,它會打印:

 
4 
5 
6 

等等。我如何在達到print聲明時立即打印python?

+0

是啊......那不是Python。 –

回答

8

嘗試調用標準輸出的沖洗打印

import sys 

... 
sys.stdout.flush() 

後或者使用command line選項-u其中:

強制標準輸入,輸出和錯誤是完全無緩衝。

+0

謝謝!這有效,但你知道我可以自動設置嗎? – Rishi

+2

@Rishi:最接近你可以讓它自動(而不必求助於編譯你自己的版本的Python)將設置'PYTHONUNBUFFERED'環境變量。 –

+0

傑夫的評論對我非常有用。謝謝 – Rishi

1

導入新的print-as-function如在Python 3.X:

from __future__ import print_function 

(放置語句在腳本/模塊的頂部)

這可以讓你更換新的打印功能用你自己的:

def print(s, end='\n', file=sys.stdout): 
    file.write(s + end) 
    file.flush() 

好處是這樣你的腳本當您將一天升級到Python 3.x時,它們的工作原理也是一樣的。

Ps1:我沒有嘗試,但打印功能可能只是在默認情況下刷新。

PS2:您可能也對我的progressbar example感興趣。

+0

對不起@Rishi,我剛剛看到以前的版本後,確認了我的答案的重寫。 – Remi

6

由於Python 3.3,你可以簡單地通過flush=True到打印功能。