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

时间:2010-08-11 21:34:19

标签: python ftp 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行,in     s = box.mkd('\ E \ this4 \')   文件“C:\ Python26 \ lib \ ftplib.py”,第553行,在mkd中     return parse257(resp)   文件“C:\ Python26 \ lib \ ftplib.py”,第651行,在parse257中     提出error_reply,resp error_reply:250目录已成功创建。

它成功创建了一个目录,但它认为它是一个错误! WTF?

我计划在循环中创建许多目录,如何在不成功创建单个目录的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

根据RFC 959(FTP),MKD唯一有效的响应代码是257.看起来这是由于FTP服务器不符合标准而引起的问题。

为了您的兴趣,这是相关的ftplib代码:

if resp[:3] != '257':
    raise error_reply, resp

答案 1 :(得分:1)

ftplib期待257的结果,定义为“已创建”,因此它可以解析<pathname>并为您返回;但是你的服务器令人惊讶地给出250的结果并且返回路径名,所以mkd方法当然会失败。

作为这种特殊服务器行为的解决方法,您可以使用voidcmd发送MKD /your/path命令 - 毕竟,您知道您要创建的路径名,因为它是绝对的。