为什么在ftplib中成功消息被视为错误
import ftplib
server = '192.168.1.109'
user = 'bob'
password = 'likes_sandwiches'
box = ftplib.FTP(server)
box.login(user, password)
s = box.mkd('\\a\\this4\\')
box.close()
x = raw_input('done, eat sandwiches now')
这段代码运行后返回了:
错误追踪(最近的调用在最前面): 文件 "C:\scripts\ftp_test.py",第 25 行,在 s = box.mkd('\E\this4\') 文件 "C:\Python26\lib\ftplib.py",第 553 行,在 mkd return parse257(resp) 文件 "C:\Python26\lib\ftplib.py",第 651 行,在 parse257 raise error_reply, resp error_reply: 250 目录创建成功。
它成功创建了一个目录,但却认为这是个错误!这是什么情况?
我打算在一个循环中创建很多目录,怎么才能做到这一点,而不让它在每次成功创建一个目录时就报错呢?
2 个回答
1
根据RFC 959(FTP协议),MKD命令的唯一有效响应代码是257。这看起来是因为FTP服务器没有遵循标准而导致的问题。
如果你感兴趣,这里是相关的ftplib代码:
if resp[:3] != '257':
raise error_reply, resp
1
ftplib
是一个用来处理 FTP(文件传输协议)的库,它期待服务器返回一个257的结果,这个结果表示“创建成功”,这样它就可以解析出你想要的 <pathname>
(路径名)并返回给你。但是你的服务器却意外地返回了250,并且没有返回路径名,所以 mkd
方法自然就失败了。
为了应对这个奇怪的服务器行为,你可以使用 voidcmd 方法,直接发送 MKD /your/path
命令。毕竟,你知道你想创建的路径名,因为它是一个绝对路径。