2010-08-11 69 views
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') 

这将返回:为什么一个成功的消息认为FTPLIB错误

回溯(最近最后一次通话): 文件 “C:\脚本\ ftp_test.py” 25行,在 小号= 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目录创建成功。

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

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

回答

1

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

为了您的利益,这是相关FTPLIB代码:

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

好吧,看起来像我的FTP服务器与重音谈话。我无法改变它。我怎样才能形成一个循环来创建目录,并忽略它会抛给我的所有这些异常呢? – chazzycheese 2010-08-11 21:47:59

+0

@ruffiko,用我的答案中提到的voidcmd方法。 – 2010-08-11 21:50:21

+0

而不是忽略异常,你应该去亚历克斯的答案和使用voidcmd。 – scy 2010-08-11 21:51:38

1

ftplib期待的257结果,定义为“创造”,所以它可以解析<pathname>并返回给你;但你的服务器出乎意料地给出了250的结果,并且不是返回路径名,所以mkd方法当然失败。

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

相关问题