簡體   English   中英

Python等待打印不完整的行?

[英]Python waits to print incomplete lines?

遵循以下Python 3代碼段:

print("walrus")
timeConsumingTask()
print("giraffe")

運行時,它將打印walrus並在延遲后打印giraffe (每個都在自己的行上)。

現在,使用以下類似代碼段:

print("walrus", end=' ')
timeConsumingTask()
print("giraffe", end=' ')

延遲后,它會同時打印walrus giraffe -盡管我希望第一個單詞先打印,然后再打印第二個單詞,中間會有一個延遲。

為什么會這樣呢? 並且有解決此問題的方法(除了不使用end之外)?

我正在使用Python 3.4.2。

這是由於Python(通常是系統的C stdio庫)緩沖了輸出。 通常,這是可取的,因為它可以帶來更好的性能,但是正如您所注意到的,有時並不是您想要的。

根據您要實現的目標,有多種方法可以解決此問題:

  • 打印到stderr而不是stdout (默認情況下不緩存stderr ):

     print("walrus", end=" ", file=sys.stderr) 
  • 打印后沖洗:

     print("walrus", end=" ") sys.stdout.flush() 

    或者,更緊湊(對於Python> 3.3),

     print("walrus", end=" ", flush=True) 
  • 這個問題的答案中也有一些選項,盡管並非所有選項都適用於Python 3。

默認情況下,標准輸出是行緩沖的; 不完整的行將保留在緩沖區中,直到寫入換行符(或緩沖區填滿)為止。 您可以通過使用以下命令刷新緩沖區來強制寫入文本

print("walrus", end=' ')
sys.stdout.flush()
timeConsumingTask()
print("giraffe", end=' ')

暫無
暫無

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

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