2011-05-06 72 views
12
import time 
import sys 
sys.stdout.write("1") 
time.sleep(5) 
print("2") 

將在5秒鐘在Python中,爲什麼不打印沒有換行符?

import time 
import sys 
sys.stdout.write("1\n") 
time.sleep(5) 
print("2") 

後打印 「12」 5秒

這是爲什麼之後將打印 「1 \ n」 個向右走,然後 「2」?

回答

21

如果添加「\ n」,那麼流將自動刷新,並且最後不會有新行。 您可以使用以下命令刷新輸出:

sys.stdout.flush()

+0

我提高了除你的答案之外的所有答案,因爲它不那麼具有說明性 – eyquem 2011-05-07 15:00:05

7

因爲stdout已被緩衝。您可能可以通過撥打sys.stdout.flush()來儘早強制輸出。

2

緩衝。這不是真的Python,而是你的操作系統/終端。來自任何程序的輸出被髮送到緩衝區,該區域是存儲器的保持區域。當整行被收集時,它被髮送到屏幕上。通常會有一個鉤子,一種名爲類似flush()的方法來強制輸出部分線條。

1

想想看,當你輸入一個命令到計算機,它不知道你完成直到你按下ENTER

同樣,換行符告訴Python中,你已經完成了該行。

4

這是因爲Python中的輸出被默認緩衝 - 通常在緩衝區已滿或導致緩衝區被刷新之前,您不會得到輸出。在這種情況下,\n被感知並導致自動沖洗。

看到這個問題了解決該問題的方法:How to flush output of Python print?

4

從sys模塊的sys.stdout.write函數命令目的地打印出的語句,而不用\ n字符。這是對標準輸出流的正常調用的作用方式,例如在C++或C中,必須手動添加\ n字符。

但是,Python提供的打印命令會自動爲字符串添加一個\ n字符,因此簡化了代碼並使其更易於閱讀。

第一個結果中出現現象的原因是因爲系統正在等待打印輸出,這是由\ n字符提供的。你可以通過使用這個命令sys.stdout.flush()來避免這種情況,該命令將刷新強制它打印的stdout流。