[英]Why does print argument flush default to False?
我正在使用打印來記錄我的 python 腳本的執行。
我到處都使用flush = True
,否則打印語句有時不會出現在它們被放置的地方。
我想知道為什么默認值是flush = False
。 誰能解釋一下?
謝謝!
通過默認情況下不強制flush
,您將決定留給您正在寫入的底層對象。 對於sys.stdin
/ stderr
這將默認為行緩沖的_io.TextIOWrapper
,這通常是您在交互式控制台上期望和想要的。 當您為文件交換輸出時,不強制每次打印/寫入flush
的默認設置似乎是合理的。 相反,每次打印后強制flush
會覆蓋底層對象的緩沖/刷新行為。
明顯的警告是,例如,當您通過tee
運行腳本時,進程自己的stdout
不會直接寫入終端。
我已經多看了一點,看看是否有任何關於動機的文字證據。 添加flush
關鍵字記錄在issue 13761 中。 顯然,將stdout
默認為True
建議是在 2012 年提出的,並被駁回(參見討論的底部)。 我想這就是可以應用 Python 之禪的地方: “特殊情況不足以打破規則。” (沒有特殊待遇只是因為我們正在寫入sys.stdout
。;)
還有一個鏈接到郵件列表中 BDFL 自己聲明:
我可以在 3.3 中向 print() 添加一個新的關鍵字參數來強制刷新,只要它默認為關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.