3
如果我運行此代碼:睡眠和打印沒有換行符?
for x in range(10):
time.sleep(1)
print("a")
它將做什麼它應該。但是,如果我運行此:
for x in range(10):
time.sleep(1)
print("a", end="")
它會等待整個10秒鐘,然後打印10 a
的。
我該如何預防?
如果我運行此代碼:睡眠和打印沒有換行符?
for x in range(10):
time.sleep(1)
print("a")
它將做什麼它應該。但是,如果我運行此:
for x in range(10):
time.sleep(1)
print("a", end="")
它會等待整個10秒鐘,然後打印10 a
的。
我該如何預防?
打印後沖洗stdout。
import time
import sys
for x in range(10):
time.sleep(1)
print("a", end="")
sys.stdout.flush()
的Python 3.3 print函數具有可選flush
參數;你可以在Python 3.3+中編寫如下代碼。
import time
for x in range(10):
time.sleep(1)
print("a", end="", flush=True)
絕對不是一個庫bug。總是假設你自己的代碼首先出錯(這看起來少了很多測試)。問題是['stdout'是行緩衝的](http://www.pixelbeat.org/programming/stdio_buffering/)。 –
@JonathonReinhart這看起來合乎邏輯,但這種行爲看起來很不穩定。不得不刷新stdout當然不是很「Python」。它們可能非常少見,但之前我在標準Python庫中遇到過錯誤(2.6中的zipfile,顯然聲名狼借) – tkbx