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

时间:2017-06-11 15:10:10

标签: python ftp ftplib

我正在尝试用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.

我确信我有权重命名该目录。有人可以帮忙吗?
感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

请勿致电retrlines,请使用sendcmd。对于最终RNTO,您甚至可以使用voidcmd更严格地验证操作(需要2xx响应)。

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

retrlines用于使用数据连接的命令。即通常用于目录列表,例如LISTNLSTMLSD。虽然RNFRRNTO是仅返回状态的简单FTP命令。