为什么在ftplib中成功消息被视为错误

3 投票
2 回答
816 浏览
提问于 2025-04-16 02:39
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 命令。毕竟,你知道你想创建的路径名,因为它是一个绝对路径。

撰写回答