2013-08-02 75 views
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的。

我該如何預防?

+2

絕對不是一個庫bug。總是假設你自己的代碼首先出錯(這看起來少了很多測試)。問題是['stdout'是行緩衝的](http://www.pixelbeat.org/programming/stdio_buffering/)。 –

+0

@JonathonReinhart這看起來合乎邏輯,但這種行爲看起來很不穩定。不得不刷新stdout當然不是很「Python」。它們可能非常少見,但之前我在標準Python庫中遇到過錯誤(2.6中的zipfile,顯然聲名狼借) – tkbx

回答

6

打印後沖洗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)