2

我写了一个简单的 Python (3.2) 脚本来下载一系列文件。它完成了工作,但在文件下载开始之前,try 块之前的第一个打印语句不会执行。我希望看到“Downloading 1...”,然后等待几分钟,然后它会打印“SUCCESS!” 或“失败!” 然后。但是,这一切都是在文件下载后同时发生的。它仍然以正确的顺序打印(即“正在下载 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!")
4

2 回答 2

3

try这与块无关。输出发生得很好,但它被缓冲了。您的终端很可能是行缓冲的,这意味着在相应行完全输出之前您看不到输出。您可以显式刷新它:sys.stdout.flush().

于 2012-12-29T17:52:16.890 回答
2

默认情况下缓冲标准输出,sys.stdout.flush()prints 之后调用或使用python -u script.py.

于 2012-12-29T17:52:05.300 回答