Skip to main content

[Python] Core Python Application Programming 예제 3-1 수정

코어 파이썬 애플리케이션 프로그래밍 146~7p 의 예제 3-1 코드가 정상적으로 동작하지 않는 이유는 아래와 같습니다. 문제가 되는 구간은 40~41 라인, 44 라인인데 라인 비교를 위해 38 라인부터 보면, 책의 경우,
    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

Popular posts from this blog

[Android Application Testing Guide] Chapter3 jar file

Android Application Testing Guide(에이콘) 3장 Sample 을 실행시키기 위해서는 libdummy-0.0.1.jar 가 필요한데, sample file 에는 프로젝트만 존재한다. 결국 jar 를 만들어야 되는데.. ant 빌드다. 어허허... jar 파일이 없으면 예제 진행이 어려우므로. ant build 한 jar 를 첨부. libdummy-0.0.1.jar download

[JUnit] JUnit 최신 사용시 주의점(JUnit in Action)

요즘 JUnit in Action 을 통해 JUnit 공부를 해 가고 있다. 책에서 사용하는 버전은 4.6, 현재 JUnit 의 최신 버전은 4.11 이다. 그런데.. 다운받아서 실행해 보면 여러 에러가 발생하게 된다. 특히 chp3 에서는 Hamcrest 를 사용하게 되는데 최신버전(4.11) 에서는 Hamcrest 가 포함되어 있지 않기 때문에 별도로 받아서 같이 실행 해야 한다. 따라서 편하게 책 내용을 진행하기 위해서는 4.6을, 그나마 좀 더 최신 버전을 쓰기 위해서는 4.10 을 (4.10 까지는 Hamcrest 포함). 아니면 아예 이클립스로 작업해서 JUnit 을 설정해 주면, 4.11 버전에 Hamcrest 를 모두 포함해서 실행시켜 준다.

Google Press Event 7/24/13

Sundar Pichai 와 함께한 아침. Google 은 3가지 새로운 제품에 대한 발표를 하였습니다. 1. 2nd Nexus7 첫번째는 이미 소문이 무성했던 Nexus7 입니다. 성능이 대폭 향상되었습니다. Nexus 7 발매와 더불어 google app 들이 업데이트 되었고, Google Play Game 과의 연계성도 더욱 향상되었습니다. 4G LTE 는 미국에만 제한적으로 사용될 것으로 보입니다. 가격은 다음과 같습니다. - 16GB WIFI : $229 - 32GB WIFI : $269 - 32GB LTE : $349 조만간 발매될 국가에 한국도 포함되어 있습니다. (만세!) Google Play 에서 판매 예정이라고 합니다. 개인적으로 고화질 디스플레이 와 OpenGL|ES 3.0 이 지원되면서 게이밍 기능이 향상된 점을 강조하는 것이 눈에 띄였습니다. 아마도 멀티미디어 적인 기능향상으로 인한 자신감이 아닐까요. 2. Android 4.3 두번째로 Android 4.3 에 대한 소식입니다. 새로운 기능들이 많이 추가되었습니다. 4.3 APIs  는 바로 다운 받을 수 있습니다. http://developer.android.com/about/versions/jelly-bean.html 개인적으로 눈에 띄는 APIs 는 ActionBar 가 드디어 하위버전을 지원하기 시작했다는 것 입니다. new v7 appcompat library 에 추가 된 사항으로 Android 2.1(API level 7) 까지 지원합니다. 이를 지원하기위해  ActionBarActivity class 가 새로이 추가 되었습니다. 3. Chromecast 위 두 소식은 이미 들은 이야기가 많았지만 chromecast  는 좀 생소했습니다. 쉽게 생각해서 Apple 의 AirPlay 와 흡사하다고 보시면 될 것 같습니다. ...