본문 바로가기

프로그래밍/Python

[Python] Python FTP 명령어 정리

반응형

라즈베리파이를 통해서 FTP 방식의 통신은 잘 사용을 하지 않지만, FTP 서버로 구성한 서버에 접속하여 데이터를 주고 받을 경우가 있다보니, 주변에 다양한 자료를 찾아보다가, 정말 잘 정리해둔 자료가 있어서 스크랩 해왔습니다~~! 

  • >>> from ftplib import FTP
    >>> ftp = FTP('ftp.debian.org') # host에 기본 포트로 연결
    >>> ftp.login() # 익명으로 접속(user anonymous, passwd anonymous@)
    >>> ftp.cwd('debian') # "debian" 디렉토리로 이동
    >>> ftp.retrlines('LIST') # 디렉토리의 내용을 목록화
    >>> ftp.retrbinary('RETR README', open('README', 'wb').write) # README 파일 저장
    >>> ftp.quit() # FTP 종료

    LIST COMMAND FORMAT
    drwxr-xr-x 19 1763 500 4096 Mar 21 18:52 jh
    -rw-r--r-- 1 1763 500 1280 Nov 29 16:07 jh.php
    1. d로 시작하면 디렉토리
    2. 19는 디렉토리 내부의 파일의 수( "." 과 ".." 포함
    3. 1763은 파일 소유자
    4. 500은 파일 그룹
    5. 1280은 파일 크기(바이트) 또는 디렉토리 크기
    6. 날짜
    7. 파일 또는 디렉토리 이름
    8. 파일명

    class ftplib.FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None)
    1. FTP 클래스의 새 인스턴스 리턴
    2. host가 주어지면 connect(host) 메소드 호출
    3. user가 주어지면 login(user, passwd, acct) 메소드 호출

    class ftplib.FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None)

    FTP.set_debuglevel(level)

    FTP.connect(host='', port=0, timeout=None, source_address=None)

    FTP.getwelcome()

    FTP.login(user='anonymous', passwd='', acct='')

    FTP.abort()
    1. 진행중인 파일 전송 중단

    FTP.sendcmd(cmd)
    1. 서버로 간단한 명령 문자열을 보내고 응답 문자열을 리턴

    FTP.voidcmd(cmd)
    1. 서버로 간단한 문자열을 보내고 응답을 처리한다.
    2. 응답 코드가 성공 코드(범위 200-299)이면 아무것도 리턴하지 않음, 그렇지 않으면 error_reply 예외 발생

    FTP.retrbinary(cmd, callback, blocksize=8192, rest=None)
    1. 바이너리 전송 모드로 파일을 가져온다.
    2. 올바른 RETR 명령이어야 한다.
    3. callback 함수는 받아지는 데이터 블록마다 호출된다.
    4. 선택적 blocksize는 최대 chunk size
    5. rest는 transfercmd() 메서드와 같음

    FTP.retrlines(cmd, callback=None)
    1. 아스키 전송 모드로 파일이나 디렉토리 목록을 가져옴
    2. cmd는 올바른 RETR 명령이거나 LIST 또는 NLST 같은 명령이어야 함
    3. LIST는 파일 목록과 파일의 정보를 가져온다.
    4. callback은 CRLF로 끝나는 각 라인마다 호출됨

    FTP.set_pasv(boolean)
    1. true이면 passive 모드
    2. passive 모드가 기본값

    FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)

    FTP.storlines(cmd, fp, callback=None)

    FTP.transfercmd(cmd, rest=None)

    FTP.ntransfercmd(cmd, rest=None)

    FTP.mlsd(path="", facts=[])
    1. MLSD 명령을 사용해서 표준화된 포맷으로 디렉토리를 리스트로 만듦
    2. path 매개변수를 빼면 현재 디렉토리
    3. facts는 정보 리스트. 예) ["type", "size", "perm"]
    4. 경로에서 발견되는 모든 파일에 대해서 두 요소를 담은 튜플을 generator 객체 반환
    5. 첫번째 요소는 파일 이름, 두번째 요소는 파일 이름에 대한 facts를 포함한 디렉토리
    6. 서버에서는 모든 요청된 facts의 반환을 보장하지는 않는다.

    FTP.nlst(argument[, ...])
    1. NLST 명령으로 반환된 파일 이름의 목록 반환
    2. 옵션 argument는 목록화할 디렉토리(기본값은 현재 디렉토리)
    3. 다수의 argument 사용해서 비표준 옵션 NLST 명령을 넘길 수 있다.
    4. 서버가 mlsd()를 지원한다면 mlsd()가 더 나은 API임

    FTP.dir(argument[, ...])
    1. LIST 명령으로 반환되는 디렉토리 목록 생성
    2. argument는 목록으로 만들 디렉토리(기본값은 현재 서버 디렉토리)
    3. 다수의 argument에 LIST 명령으로 비표준 옵션을 넘길 수 있다.
    4. 마지막 인자가 함수라면 retrlines()의 callback 함수르 사용된다.

    FTP.rename(fromname, toname)
    1. 서버의 fromname에서 toname으로 이름 변경

    FTP.delete(filename)
    1. 서버에서 파일 삭제
    2. 성공하면 응답 텍스트가 반환
    3. 퍼미션 에러 발생시 error_perm 발생
    4. 다른 에러 발생시 error_reply 발생

    FTP.cwd(pathname)
    1. 서버에 현재 디렉토리 설정

    FTP.mkd(pathname)
    1. 서버에 새 디렉토리 생성

    FTP.pwd()
    1. 서버의 현재 디렉토리의 경로명 반환

    FTP.rmd(dirname)
    1. 서버의 dirname의 디렉토리 삭제

    FTP.size(filename)
    1. 서버에 filename의 크기 요청
    2. 성공시 정수형으로 파일의 크기 반환
    3. 실패시 None 반환

    FTP.quit()
    1. 서버에 QUIT 명령 전송하고 연결을 닫는다.
    2. 연결을 닫는 정중한 방식이다.
    3. 서버가 QUIT 명령에 에러를 응답한다면 예외가 발생할 수 있다. 이 때 close() 메서드 호출을 암시한다.

    FTP.close()
    1. 연결을 일방적으로 닫는다.
    2. 성공적인 quit()로 이미 닫힌 연결에는 적용하면 안됨
    3. close() 또는 quit()의 호출 후에는 login() 메서드로 다시 연결할 수 없다.

    상위 디렉토리로 가기
    ftp.sendcmd('CDUP')

    파일 퍼미션 변경
    ftp.sendcmd('SITE CHMOD 777 ' + entry)

    파일 업로드
    ftp.storlines('STOR ' + filename, open(ftp_up_file, 'rb'))

    이름변경
    1. 서버에 파일이 존재하면 350 반환 
    2. 450, 550이면 실패
    if self.ftp.sendcmd('RNFR ' + f)[:3] == '350': 
        self.ftp.sendcmd('RNTO ' + new_name) 

    예외 목록
    1. ftplib.error_reply 
    2. ftplib.error_temp 
    3. ftplib.error_perm 
    4. ftplib.error_proto 
    5. ftplib.all_errors

스크랩 : http://zeroplus1.zc.bz/jh/web/main.php?id=178&category=ETC


즐거운 코딩하세요 ^^


반응형