FTP.delete(filename) from ftplib 错误

jam*_*meh 0 python ftp networking ftplib delete-file

当我尝试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.
Run Code Online (Sandbox Code Playgroud)

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

该站点实际上是一个支持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
Run Code Online (Sandbox Code Playgroud)

ybd*_*ire 5

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

\n
ftp.cwd(\xe2\x80\x98.\xe2\x80\x99\xef\xbc\x89\n\ndirectory = '/Public/test/hello/will_i_be_deleted/'    \n\n# delete files in dir\nfiles = list(ftp.nlst(directory))\nfor f in files:\n    if f[-3:] == "/.." or f[-2:] == '/.': continue\n    ftp.delete(f)\n\n# delete this dir\nftp.rmd(directory)\n
Run Code Online (Sandbox Code Playgroud)\n