2012-12-29 96 views
2

我寫了一個簡單的Python(3.2)腳本來下載一系列文件。它完成了工作,但在文件下載開始之前,try塊之前的第一個打印語句不會執行。我希望看到「正在下載1 ...」,然後等待幾分鐘,然後打印出「成功!」。或「失敗!」之後。但是,這一切都在文件下載後同時發生。它仍然以正確的順序打印(即「下載1 ...成功!」),但我不能爲了我的生活找出爲什麼它掛起。聲明之前嘗試阻止等待,直到嘗試執行

from urllib import request 

for i in range(1,35): 
    url = "http://example.com/" + str(i) + ".mp4" 
    print("Downloading " + str(i) + "...", end='') #this doesn't happen until after the try 
    try:  
     resp = request.urlopen(url) 
     local = open(str(i) + '.mp4', 'wb') 
     local.write(resp.read()) 
     local.close() 
     print("SUCCESS!") 
    except: 
     print("FAILURE!") 

回答

3

這與try塊無關。輸出發生得很好,但它是緩衝的。您的終端最有可能是線路緩衝的,這意味着在相應的線路完全輸出之前您不需要輸出。您可以明確地刷新它:sys.stdout.flush()

+0

謝謝,這解釋了一切。 – jimbotron

2

標準輸出默認情況下緩衝,叫sys.stdout.flush()print秒或與python -u script.py運行你的腳本。

+0

-u標誌沒有做任何事(奇怪的是),sys.stdout.flush()的工作就像一個魅力。 – jimbotron