2014-06-17 79 views
3

後面的步驟我開發了一個Python腳本,它可以連續執行多個任務(主要連接到服務器和檢索信息)。打印在同一行上,步驟

有許多步驟,併爲他們每個我想顯示一個點,以便用戶知道有什麼事情發生。

在每一步結束後,我做的:

print('.', end='') 

,並在最後一步,我寫:

print('Done!') 

它的工作原理,但直到執行最後打印不顯示任何內容,所以它有點擊敗其原來的目的:)

基本上,屏幕上沒有顯示任何內容,並在最後一刻,這彈出:

.......Done! 

如何強制Python在同一行上一步一步打印?

回答

9

默認情況下,stdout是行緩衝的,這意味着在寫入換行符之前緩衝區不會被刷新。

刷新緩衝區,明確每次打印'.'

print('.', end='', flush=True) 

在Python 3.3中加入的flush關鍵詞;對於舊版本,請使用sys.stdout.flush()

print() function documentation

無論輸出進行緩衝通常由文件確定的,但是如果沖洗關鍵字參數爲真時,該流被強制地刷新。

並從sys.stdout documentation(對於文件參數的print()功能的默認值):

當互動,標準流行緩衝。否則,它們像常規文本文件一樣被塊緩衝。

+0

謝謝!我正在查看3.0文檔,沒有看到Flush選項。在[最新版本[(https://docs.python.org/3/library/functions.html#print)它在這裏:) – Pierre

2

而不是使用打印的,你可以直接寫入到標準輸出,(無緩衝):

import sys 
import time 

for i in range (10): 
    time.sleep (0.5) 
    sys.stdout.write('.') 
print 'Done!' 
+0

謝謝!我不知道緩衝/無緩衝的事情。 – Pierre

0

爲Python 2.7.3,你可以留下後面的逗號,它告訴閒置未插入行後該語句印刷例如

print "hello", 
print "world" 

將返回

>>> hello world