3
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')

这将返回:

Traceback(最近一次调用最后):文件“C:\scripts\ftp_test.py”,第 25 行,在 s = box.mkd('\E\this4\') 文件“C:\Python26\lib\ftplib.py ",第 553 行,在 mkd 返回 parse257(resp) 文件 "C:\Python26\lib\ftplib.py",第 651 行,在 parse257 中引发 error_reply,resp error_reply: 250 目录创建成功。

它成功创建了一个目录,但它认为它是一个错误!怎么回事?

我计划在一个循环中创建许多目录,我怎样才能做到这一点而不会在每次成功创建单个目录时都中断?

4

2 回答 2

1

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

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

于 2010-08-11T21:49:08.997 回答
1

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

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

if resp[:3] != '257':
    raise error_reply, resp
于 2010-08-11T21:41:08.260 回答