코어 파이썬 애플리케이션 프로그래밍 146~7p 의 예제 3-1 코드가 정상적으로 동작하지 않는 이유는 아래와 같습니다.
문제가 되는 구간은 40~41 라인, 44 라인인데 라인 비교를 위해 38 라인부터 보면,
책의 경우,
그러나 실제로는 아래와 같이 되어야 정상적으로 동작 합니다.
이유인즉, 40~41 라인 코드가 다운로드 완료 if 문으로 동작해서 다운로드 완료 된 파일을 다시 삭제하기 때문입니다. 따라서 전체 동작하는 코드는 아래와 같습니다.
except ftplib.error_perm:
print 'ERROR: cannot read file "%s"' %FILE
if os.path.exists(FILE):
os.unlink(FILE)
else:
print '*** Download "%s" to CWD'%FILE
f.quit()
그러나 실제로는 아래와 같이 되어야 정상적으로 동작 합니다.
except ftplib.error_perm:
print 'ERROR: cannot read file "%s"' %FILE
if os.path.exists(FILE):
os.unlink(FILE)
else:
print '*** Download "%s" to CWD'%FILE
f.quit()
이유인즉, 40~41 라인 코드가 다운로드 완료 if 문으로 동작해서 다운로드 완료 된 파일을 다시 삭제하기 때문입니다. 따라서 전체 동작하는 코드는 아래와 같습니다.
#!/usr/bin/env python
import ftplib
import os
import socket
HOST = 'ftp.mozilla.org'
DIRN = 'pub/mozilla.org/webtools'
FILE = 'bugzilla-LATEST.tar.gz'
def main():
try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror) as e:
print 'ERROR: cannot reach "%s"' %HOST
return
print '*** Connected to host "%s"'%HOST
try:
f.login()
except ftplib.error_perm:
print 'ERROR: cannot login anonymously'
f.quit()
return
print '*** Logged in as "anonymous"'
try:
f.cwd(DIRN)
except ftplib.error_perm:
print 'ERROR: cannot CD to "%s" folder'%DIRN
f.quit()
return
print '*** Changed to "%s" folder' % DIRN
try:
f.retrbinary('RETR %s'%FILE,
open(FILE,'wb').write)
except ftplib.error_perm:
print 'ERROR: cannot read file "%s"' %FILE
if os.path.exists(FILE):
os.unlink(FILE)
else:
print '*** Download "%s" to CWD'%FILE
f.quit()
if __name__ == '__main__':
main()
Comments
Post a Comment