我一直在使用ls = f.mlsd()
从ftp获取文件列表和时间戳,但它给了我
ftplib.error_perm: 500 Unknown command
ftp服务器有问题吗?我是否需要在服务器上安装任何内容才能使此命令正常工作
答案 0 :(得分:3)
事实上,MLSD只不过是RFC 3659中引入的协议扩展,某些FTP服务器可能不支持。如果您关心可移植性,最好使用f.nlst()
代替。
如果您在服务器上更改某些内容是可以接受的,那么我建议您切换到具有MLSD支持的proftpd,作为其mod_facts扩展的一部分。
答案 1 :(得分:2)
MLSD
命令不是原始FTP标准的一部分。它仅在2007年的RFC 3659中添加。虽然现在还很久以前,但即使是现在一些主要的FTP服务器也不支持它。特别是IIS和vsftpd。
如果您需要时间戳但又需要与不支持MLSD
命令的服务器通信,则有两种选择:
使用FTP.dir
(LIST
命令)。并解析文件列表的专有格式以检索时间戳。
使用FTP.nlst
检索文件(和文件夹)列表。然后,使用FTP.voidcmd
为每个列出的文件发送MDTM
command。 MDTM
以标准格式返回文件时间戳。
显然,这种做法不如之前的方法有效,但您不必处理专有格式的目录列表。
请注意,所有FTP服务器都不支持MDTM
,但它比MLSD
支持得更广泛,尽管这两个命令来自同一个RFC(3659)。特别是常见的Linux FTP服务器之一vsftpd支持MDTM
,但不支持MLSD
。
有关实施这两种方法的代码,请参阅我的回答:
How to get FTP file's modify time using Python ftplib