sys.stdout.flush()
是做什麼用的?sys.stdout.flush()方法的用法
回答
Python的標準輸出被緩衝(意味着它在將數據寫入終端之前收集一些「寫入」標準的數據)。調用sys.stdout.flush()
強制它「刷新」緩衝區,這意味着它會將緩衝區中的所有內容寫入終端,即使通常它會在這樣做之前等待。
下面是關於(UN)緩衝I/O一些好的信息,以及它爲什麼有用:
http://en.wikipedia.org/wiki/Data_buffer
Buffered vs unbuffered IO
這不能在Windows上工作! – 2014-08-16 13:53:06
@Ciastopiekarz我們可以做些什麼來緩衝窗口上的緩衝區? – helplessKirk 2015-11-10 16:41:59
@Ciastopiekarz你怎麼看?如果我使用Andrew Clark的Python腳本,並用'sys.stdout.write(「%d」%i)'替換打印行,那麼我必須取消對「sys.stdout.flush()'的調用以獲取當腳本執行時顯示緩衝區。 – 2016-04-25 04:35:02
考慮以下簡單的Python腳本:
import time
import sys
for i in range(5):
print i,
#sys.stdout.flush()
time.sleep(1)
這是爲了打印一個數每秒五秒鐘,但如果你運行它,因爲它是現在(取決於默認的系統緩存),你可能在腳本完成之前不會看到任何輸出,然後一次性顯示0 1 2 3 4
將打印到屏幕上。
這是因爲輸出被緩衝,除非您在每個print
之後刷新sys.stdout
,否則不會立即看到輸出。從sys.stdout.flush()
行刪除評論以查看差異。
在Python 3.x中,'print i'應該被print(i, end =''),因爲Python 3中的print()有一個默認前綴end ='\ n',它提示控制檯刷新。 – 2014-08-02 17:53:46
我只是有這個問題!非常感謝你澄清爲什麼解決它! – 2017-10-23 19:43:39
按我的理解,當曾經我們執行打印語句輸出將被寫入緩衝。當緩衝區被刷新(清除)時,我們將在屏幕上看到輸出。默認情況下,當程序退出時,緩衝區將被刷新。但我們也可以通過在程序中使用「sys.stdout.flush()」語句來手動刷新緩衝區。在下面的代碼中,當i的值達到5時,緩衝區將被刷新。
你可以通過執行下面的代碼來理解。
藏羚羊@在線:〜$貓flush.py
import time
import sys
for i in range(10):
print i
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
time.sleep(1)
for i in range(10):
print i,
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
藏羚羊@在線:〜$
*****輸出*****
藏羚羊@在線: 〜$蟒蛇flush.py
0 1 2 3 4 5 Flushing buffer
6 7 8 9 0 1 2 3 4 5 Flushing buffer
6 7 8 9
藏羚羊@在線:〜$
import sys
for x in range(10000):
print "HAPPY >> %s <<\r" % str(x),
sys.stdout.flush()
- 1. Python sys.stdout.flush()不起作用
- 2. 的Python - sys.stdout.flush()2線在Python 2.7
- 3. 方法 - 調用方法
- 4. 具有嵌套方法的方法引用參數的方法
- 5. 使用ARC的弱方法與強方法的iOS方法
- 6. 調用其他方法的TDD方法的正確方法
- 7. ProcessBuilder.directory()方法的用法
- 8. sys.stdout.flush不jupyter筆記本工作
- 9. 用法Array.push方法
- 10. 上調用方法的方法在C++
- 11. 獲取方法被調用的方法?
- 12. 結束調用此方法的方法
- 13. 用嵌套方法鏈接的方法
- 14. 主要方法中的調用方法
- 15. 用同樣的方法鏈接方法
- 16. 調用MembershipProvider方法的正確方法?
- 17. 使用Var方法輸入的方法?
- 18. 調用方法的好方法
- 19. 未定義的方法調用方法
- 20. 調用方法的最快方法
- 21. 如何調用方法內的方法
- 22. 用於Java的escapeA'方法replaceAll方法
- 23. 從java中的方法調用方法
- 24. 重用Java方法的最佳方法
- 25. Java:調用方法main中的方法
- 26. 從viewDidAppear方法調用viewController的方法
- 27. 調用基類方法的虛方法
- 28. 調用自寫ruby方法的方法
- 29. 上的一個方法調用方法
- 30. 調用方法內部方法的正確方法
參見:http://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print – nitin 2012-04-04 21:25:01