2017-11-25 163 views
0
import time 

for i in range(100): 
    print('*',end='') 
    time.sleep(0.1) 

爲什麼此代碼無法顯示進度?預期產出將顯示進展「****************」。進度條不工作?

+0

它對您有什麼影響?這個對我有用。 https://repl.it/repls/TreasuredPerfumedIndianpangolin – user2896976

+0

@ user2896976它等待一段時間,然後打印'*'100次,它不會像進度條那樣打印。 – user8751232

+0

你如何運行腳本? – user2896976

回答

0

Stdout被緩衝。您可以在每個print之後致電sys.stdout.flush()以刷新它。或者您可以將flush=True添加到您的打印命令中,而不是執行明確的刷新:

print('*', end='', flush=True) 
+0

你能告訴我什麼是沖洗,爲什麼它被使用以及如何sys.stdout.flush?我的意思是你可以在內部代碼中使用什麼黑客? – user8751232

+0

@ user8751232,stdout是默認情況下'print'輸出的地方。爲了提高性能,標準輸出通常被緩衝。通常,stdout是行緩衝的。也就是說,除非整行準備好打印,否則實際上沒有打印任何內容。刷新意味着將所有從緩衝區中累積的內容都推送出去,所以'sys.stdout.flush()'將所有內容都從緩衝區中移出並放到屏幕上。 'flush = True'做同樣的事情。您也可以消除整個應用程序的緩衝區,但在正常情況下您不希望這樣做。 –