2

一連のファイルをダウンロードするための簡単なPython(3.2)スクリプトを作成しました。ジョブは完了しますが、ファイルのダウンロードが開始される前に、tryブロックの前にある最初のprintステートメントは実行されません。「Downloading1...」が表示されると思っていたので、数分待ってから「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

標準出力はデフォルトでバッファリングされます。sのsys.stdout.flush()後に呼び出すprintか、。を使用してスクリプトを実行しますpython -u script.py

于 2012-12-29T17:52:05.300 に答える