2012-12-29 2 views
2

일련의 파일을 다운로드하는 간단한 Python (3.2) 스크립트를 작성했습니다. 작업은 끝났지 만 파일 다운로드가 시작되기 전에 try 블록 앞에 오는 첫 번째 print 문은 실행되지 않습니다. 나는 "Downloading 1 ..."을보고, 몇 분 기다렸다가 "SUCCESS!"라고 인쇄 할 것입니다. 또는 "실패!" 나중에. 그러나이 모든 것은 파일이 다운로드 된 후에 동시에 발생합니다. 그것은 올바른 순서로 계속 인쇄됩니다 (즉, "다운로드 중 1 ... 성공!"). 그러나 왜 내 삶에 매달려 있는지 파악할 수 없습니다.try 블록이 실행되기 전에 try 블록이 끝날 때까지 대기

표준 출력은 기본적으로 버퍼링
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

관련 문제