2011-02-24 63 views
6

我正在爲我的上傳腳本做一個進度條,因此我想打印一行多個'#'但我無法使其工作。當我告訴Python不添加換行符時,它確實將其刪除,但它在函數下無法正常工作。在Python 3中使用「print」('#',end ='')「或在Python 2中使用」print'#'「,但是在函數中執行時,它不會打印任何內容,直到整個函數完成,它不應該像正常打印一樣等待。在沒有換行的情況下打印功能在Python中不起作用

import time 

i = 0 

def status(): 
    print('#', end='') 

while i < 60: 
    status() 
    time.sleep(1) 
    i += 1 

這應該打印「#」每一秒,但事實並非如此。它在60秒後全部打印出來。使用print('#')按預期每秒打印一次。我真的需要解決這個問題。請幫忙!

解決方案: 「sys.stdout.flush()」 每個打印:)

+0

你爲什麼試圖重新發明輪子? http://pypi.python.org/pypi/fish/ – 2011-02-24 06:27:25

+0

我使用基於[this](http://nadiana.com/animated-terminal-progress-bar-in-python)的解決方案,它非常酷, imo :) – simon 2011-02-24 06:54:37

+0

很酷的東西。但我的進度條實際上是陰莖,所以我最小的解決方案效果最好:) – ggustafsson 2011-02-24 07:42:33

回答

6

後,您可能需要在每次調用print後刷新輸出緩衝區。請參閱How to flush output of Python print?

+0

哦,這個問題下有一些很酷的東西,謝謝! – simon 2011-02-24 06:50:57

+0

謝謝! sys.stdout.flush()的作品:) – ggustafsson 2011-02-24 07:01:23

0

我在IDLE中嘗試了2.5代碼。所以我不得不使用打印格式 - print'#',

這是當我執行它時得到的結果 - 系統每秒都會打印'#'符號。在循環結束時,我得到了關於IDLE的提示。所以在我看來,它正在做你期望的事情。

你正在使用哪個版本?對不起,我沒有版本3.所以我不能在那裏測試它。

+0

我已經在OS X上的Terminal.app中嘗試過Python 2.6.1和Python 3.2。 – ggustafsson 2011-02-24 06:59:50

0

您可以隨時使用strip()功能。

相關問題