2011. 12. 8. 10:29

Ÿ FTP(File Transfer Protocol) 프로토콜 클라이언트는 새로 구현할 필요가 없다.

ftplib 모듈이 FTP클래스를 지원하며 이것은 클라이언트 측의 FTP 프로토콜을 구현한다.

이 클래스를 다른 FTP 사이트의 미러링과 같은 자동화된 FTP 작업을 수행하기 위해 사용할 수 있다.

 

FTP는 기본 포트 21/20을 사용하는 이중 채널 프로토콜이다. 서버의 21번 포트는 제어 연결로서

제어 정보를 전달하는 데 사용되고, 20번 포트는 데이터를 교환하는 데 사용된다.

ftplib는 기본적으로 패시브(Passive)모드로 동작한다. 즉, 서버가 데이터 포트를 먼저 열고,

데이터 포트 정보를 제어 연결 포트를 통해 전달하면 클라이언트가 포트로 접속하는 방식이다.

(※ FTP 규약에 관한 자세한 정보는 인터넷 RFC 959를 참조.)

 

[ 객체 생성 ]

class ftplib.FTP(host[, user[, passwd[, acct]]]))

 

ftp 객체를 생성한다.

host가 주어지면 서버로 연결(connect(host))하고,

부가적으로 user, passwd 정보가 주어지면 로그인(login(user, passwd, acct))이 된다.

>>> from ftplib import FTP

>>> ftp = FTP("ftp1.at.proftpd.org") # connect to host, default port

 

[ 접속 관련 메서드 ]

FTP.connect(host[, port])

 

주어진 (host, port)로 연결.

>>> from ftplib import FTP

>>> ftp = FTP()

>>> ftp.connect("ftp1.at.proftpd.org")

'220 FTP Server ready.'

 

FTP.login([user[, passwd[, acct]]])

 

로그인함 (아무 인수도 주어지지 않으면 'anonymous'로 로그인)

>>> ftp.login(user, password)

 

FTP.close()

 

연결 종료

>>> ftp.close()

 

[ 파일 목록을 얻는 메서드 ]

FTP.dir([argument[, ...]])

 

"LIST"명령으로 파일 목록을 얻는다.

선택적인 인수 argument는 파일 목록을 표시할 디렉터리를 지정한다. (기본값 - 현재 디렉터리)

>>> from ftplib import FTP

>>> with FTP("ftp1.at.proftpd.org") as ftp:

... ftp.login()

... ftp.dir()

...

'230 Anonymous login ok, restrictions apply.'

dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .

dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 ..

dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS

dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora

...

 

FTP.nlst([argument[, ...]])

 

"NLST" 명령으로 파일 목록을 얻는다.

선택적인 인수 argument는 파일 목록을 표시할 디렉터리를 지정한다. (기본값 - 현재 디렉터리)

>>> ftp.nlst()

['.', '..', 'centos', 'fedora', 'CentOS', 'Fedora', 'ProFTPD', 'grml', 'linux-kernel',

'OpenOffice.org', 'Knoppix', 'LibreOffice']

 

[ 파일 다운로드/저장 메서드 ]

FTP.retrlines(command[, callback])

 

ASCII 모드로 파일을 받는다.

텍스트 파일을 다운로드 받을 때 command는 "RETR 파일 이름"이 된다.

파일 목록을 받을 때 사용한다면 command는 "LIST"가 된다.

callback은 서버로부터 전송되는 블록을 저장할 함수로 기본값은 sys.stdout.write이다.

>>> ftp.retrlines('LIST') # 화면에 파일 목록 표시

dr-xr-xr-x 10 ftp ftp 4096 Aug 12 13:34 .

dr-xr-xr-x 10 ftp ftp 4096 Aug 12 13:34 ..

dr-xr-xr-x 5 ftp ftp 4096 Sep 14 15:23 CentOS

dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora

...

'226 Transfer complete'

 

>>> ftp.cwd('./ProFTPD') # 디렉터리 변경

>>> ftp.retrlines('RETR README.MIRRORS') # 화면에 파일 내용 표시

This is the main distribution site for ProFTPD. Rather than downloading

...

'226 Transfer complete'

 

# 로컬에 저장

>>> ftp.retrlines('RETR README.MIRRORS', open('c:\\readme.txt', 'w').write)

'226 Transfer complete'

 

FTP.retrbinary(command, callback[, maxblocksize[, rest]])

 

이진 파일을 받을 때 사용한다.

command는 "RETR 파일이름"이 된다.

callback은 서버로부터 전송되는 블록을 저장할 함수이다.

>>> ftp.retrbinary('RETR pybbs.tar', open('pybbs.tar', 'wb').write)

 

FTP.storlines(command, file)

 

ASCII 모드로 파일을 서버에 저장한다.

command는 "STOR 파일이름"이며

file은 서버로 데이터를 보내는 데 사용될 readline() 메서드를 제공하는 파일 객체이다.

>>> ftp.storlines('STOR xpath.py', open('xpath.py', 'r'))

 

FTP.storbinary(command, file[, blocksize])

 

이진 모드로 파일을 서버에 저장한다.

command는 "STOR 파일이름"이며

file은 서버로 데이터를 보내는 데 사용될 read() 메서드를 제공하는 파일 객체이다.

>>> ftp.storbinary('STOR test.tgz', open('test.tgz', 'rb'))

 

FTP.abort()

 

파일 전송을 중지한다.

 

 

[파일 관련 메서드]

 

[ 메서드 ]

[ 설명]

size(filename)

서버에 filename의 크기를 요구.(성공-정수 크기, 실패-None)

rename(fromname, toname)

서버에 있는 파일 이름 변경

delete(filename)

서버의 파일을 삭제

 

[디렉터리 관련 메서드]

 

[ 메서드 ]

[ 설명]

pwd()

서버의 현재 디렉터리를 얻는다

cwd(pathname)

서버의 현재 디렉터리를 변경

mkd(pathname)

서버에 디렉터리 생성

rmd(dirname)

서버에 디렉터리 제거

 

[기타 메서드]

 

[ 메서드 ]

[ 설명]

set_pasv(boolean)

만일 boolean이 참이면 passive 모드가 설정.

sendcmd(command)

임의의 단순한 명령을 서버로 전송하고 응답 문자열을 받는다.

voidcmd(command)

임의의 단순한 명령을 서버로 전송하고 응답 코드를 처리한다.

응답 코드가 200-299 영역인 경우에는 리턴 값이 없으며

그렇지 않으면 예외가 발생한다.

 

'Programming > Python' 카테고리의 다른 글

파이썬 – 날짜시간(datetime) 모듈  (0) 2011.11.26
파이썬 – 시간(time) 모듈  (1) 2011.11.26
파이썬 – os 모듈  (2) 2011.11.22
파이썬 – sys 모듈  (0) 2011.11.21
파이썬 – os.glob 모듈  (0) 2011.11.20
Posted by devanix