簡體   English   中英

Python:為什么這個打印自動刷新到沒有flush()的屏幕?

[英]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通常會保證刷新已完成,但假設反向關系是邏輯謬誤,類似於:

  1. 狗是動物。
  2. 這是一種動物。
  3. 因此這是一只狗。

換句話說, 使用flush不保證不會發生沖洗。

有趣的是,在Win81中使用Cygwin下的Python 2.7.8,我看到了相反的行為 - 一切都被批量化到最后。 它可能與Windows原生Python不同,它也可能與IDLE不同。

請參閱stdio緩沖 簡單來說:

默認緩沖模式:

  • stdin總是被緩沖
  • stderr總是無緩沖的
  • 如果stdout是終端,則緩沖自動設置為行緩沖,否則設置為緩沖

對我來說,你給出的例子是:

cmd

  • 在Cygwin的python中退出時的所有數字
  • 在Win32 python中一個接一個

mintty

  • 一切都在退出時
  • -u選項一個接一個
  • sys.stdout.isatty()返回False

因此,當它指向終端時,看起來msvcrtstdout是無緩沖的。 使用簡單C程序進行的測試顯示了相同的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM