0

当我尝试ftp.delete()从 ftplib 使用时,它会引发error_perm,resp:

>>> from ftplib import FTP
>>> ftp = FTP("192.168.0.22")
>>> ftp.login("user", "password")
'230 Login successful.'
>>> ftp.cwd("/Public/test/hello/will_i_be_deleted/")
'250 Directory successfully changed.'
>>> ftp.delete("/Public/test/hello/will_i_be_deleted/")
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 520, in delete
resp = self.sendcmd('DELE ' + filename)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 243, in sendcmd
return self.getresp()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 218, in getresp
raise error_perm, resp
ftplib.error_perm: 550 Delete operation failed.

该目录存在,并且“用户”有足够的权限删除该文件夹。

该站点实际上是一个支持 ftp 的 NAS(WD MyBookWorld)。

更改到父目录并使用命令ftp.delete("will_i_be_deleted")也不起作用。

“will_i_be_deleted”是一个空目录。

WD MyBookWorld 的 ftp 设置:

Service - Enable; Enable Anonymous - No; Port (Default 21) - Default
4

3 回答 3

4

我解决这个 ftplib.error_perm: 550 问题的解决方案是 cwd 到 FTP 服务器的根目录,并按如下所示的完整路径删除文件。

ftp.cwd(‘.’)

directory = '/Public/test/hello/will_i_be_deleted/'    

# delete files in dir
files = list(ftp.nlst(directory))
for f in files:
    if f[-3:] == "/.." or f[-2:] == '/.': continue
    ftp.delete(f)

# delete this dir
ftp.rmd(directory)
于 2017-04-11T06:56:18.590 回答
2

你需要使用rmd命令,即

ftp.rmd("/Public/test/hello/will_i_be_deleted/")

rmd用于删除目录,delete用于删除文件。

于 2012-05-18T07:41:29.833 回答
0

唯一对我有用的方法是我可以使用 ftp.rename() 命令重命名:

例如

ftp.mkd("/Public/Trash/")
ftp.rename("/Public/test/hello/will_i_be_deleted","/Public/Trash/will_i_be_deleted")

然后不时手动删除垃圾箱的内容。

我不知道这是否是 WD MyBookWorld ftp 功能的独有问题,但至少我有一个解决方法。

于 2012-05-19T01:01:00.077 回答