[英]Python: why is this print automatically flushing to screen without flush()?
我正在閱讀python中的std.flush()。 我發現這個例子很多。
import sys,time
for i in range(10):
print i,
#sys.stdout.flush()
time.sleep(1)
人們常說它與/或沒有“sys.stdout.flush()”有所區別。 但是,當我從命令提示符調用此腳本時,它對我的情況沒有任何影響。 兩個打印的數字都實時顯示在屏幕上。 我在windows中使用了python 2.7.5。
為什么會這樣?
ps在另一個通過subprocess.PIPE而不是直接打印輸出的例子中,我確實觀察到了緩沖的不同。
我錯過了什么?
使用flush
通常會保證刷新已完成,但假設反向關系是邏輯謬誤,類似於:
換句話說, 不使用flush
不保證不會發生沖洗。
有趣的是,在Win81中使用Cygwin下的Python 2.7.8,我看到了相反的行為 - 一切都被批量化到最后。 它可能與Windows原生Python不同,它也可能與IDLE不同。
請參閱stdio
緩沖 。 簡單來說:
默認緩沖模式:
- stdin總是被緩沖
- stderr總是無緩沖的
- 如果stdout是終端,則緩沖自動設置為行緩沖,否則設置為緩沖
對我來說,你給出的例子是:
在cmd
:
mintty
:
-u
選項一個接一個 sys.stdout.isatty()
返回False
! 因此,當它指向終端時,看起來msvcrt
的stdout
是無緩沖的。 使用簡單C程序進行的測試顯示了相同的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.