1 FTP - File Transfer Protocol
2 FTP 实际上使用了两个 TCP 链接. 一个作为控制信道用, 主要传输一些指令和响应,
3 比如 ACK 或 错误码. 另一个链接是数据信道, 用来传输文件和一些诸如目录列表的
4 信息等.
5
6 from ftplib import FTP, all_errors
7 FtpServerAddr = ''
8 user = ''
9 PW = ''
10 acct = ''
11
12 FH = FTP(FtpServerAddr)
13 FH.login(user, PW, acct) # 不带参数表示 anonymous 登入
14
15 FH.getwelcome() # 获取问候语
16 FH.pwd() # 获取当前工作目录
17 FH.cwd() # 更换工作目录
18 FH.retrlines('cmd', 'callable') # 以 ASCII 模式下载, 文件被一行一行的传输.
19 # 一般 callable 是一个保存文件到本地的函数,
20 # 省略 callable, 数据将被打印到屏幕.
21 # cmd = 'RETR filename'
22 FH.retrbinary('cmd', 'callable', 'blocksize', 'rest')
23 # 以二进制模式下载数据
24 # If optional rest is given, a REST command is sent to the server,
25 # passing rest as an argument. rest is usually a byte offset into
26 # the requested file, telling the server to restart sending the file’s
27 # bytes at the requested offset, skipping over the initial bytes.
28 # Note however that RFC 959 requires only that rest be a string containing
29 # characters in the printable range from ASCII code 33 to ASCII code 126.
30 # The method, therefore, converts rest to a string, but no check is performed
31 # on the string’s contents. If the server does not recognize the REST command,
32 # an error_reply exception will be raised. If this happens, simply call method
33 # without a rest argument.
34
35 FH.storbinary('cmd', 'FH', 'blocksize', 'callable', 'rest')
36 # 对应 socket 的 read() 方法, 二进制模式.
37 # cmd = 'STOR filename'
38 FH.storlines('cmd', 'FH', 'callable')
39 # 对应 socket 的 readline() 方法, ACSII 模式.
40 # cmd = 'STOR filename'
41 FH.nlst() # 获取路径下的条目
42 FH.dir() # 获取路径下的条目及相信信息, ls - la / dir
43
44 FH.delete('filename') # 删除 filename 文件
45 FH.rmd('dirname') # 删除 dirname 目录
46 FH.mkd('dirname') # 建立 dirname 目录
47 FH.rename('fromname', 'toname') # 重命名
48 FH.quit() # 断开 FTP 链接
49
50 Error Handling,
51 ftplib.all_errors 包含累所有的有可能由 fitplib 产生的异常.
52 可以在 try: except 代码块中通过 ftplib.all_errors 来捕捉
53 处理可能发生的错误.
54
55 Reference,
56 Python doc,
57 https://docs.python.org/3/library/ftplib.html