如何使用 RNFT 和 RNTO 命令重命名目录? (Python FTP)

How to rename directories using RNFT and RNTO commands? (Python FTP)

我正在尝试在 Python 中编写一个 FTP 客户端软件。我尝试实现一种重命名目录的方法:

 ftp = FTP()
 ftp.connect('host')
 ftp.login('usrname', 'pass')
 ftp.retrlines('RNFR Builds')
 ftp.retrlines('RNTO My_Builds')

但是我一直收到这个错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__
    return self.func(*args)
  File "Source.py", line 449, in set_name_from_rename
    self.ftpController.ftp.retrlines('RNFR Builds')
  File "/usr/lib/python3.5/ftplib.py", line 467, in retrlines
    with self.transfercmd(cmd) as conn, \
  File "/usr/lib/python3.5/ftplib.py", line 398, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "/usr/lib/python3.5/ftplib.py", line 374, in ntransfercmd
    raise error_reply(resp)
ftplib.error_reply: 350 Directory exists, ready for destination name.

我确定我有重命名目录的权限。有人可以帮忙吗?
提前感谢您的帮助。

不要调用retrlines,使用sendcmd. For the final RNTO, you can even use voidcmd更严格地验证操作(需要2xx响应)。

ftp.sendcmd('RNFR Builds')
ftp.voidcmd('RNTO My_Builds')

retrlines 用于使用数据连接的命令。 IE。通常用于目录列表,例如 LISTNLSTMLSD。虽然 RNFRRNTO 是微不足道的 FTP 命令,但只有 return 状态。