ftplib MLSD命令提供500 Unknown命令

时间:2018-03-28 07:50:10

标签: python python-3.x ftp ftplib

我一直在使用ls = f.mlsd()从ftp获取文件列表和时间戳,但它给了我

ftplib.error_perm: 500 Unknown command

ftp服务器有问题吗?我是否需要在服务器上安装任何内容才能使此命令正常工作

2 个答案:

答案 0 :(得分:3)

事实上,MLSD只不过是RFC 3659中引入的协议扩展,某些FTP服务器可能不支持。如果您关心可移植性,最好使用f.nlst()代替。

如果您在服务器上更改某些内容是可以接受的,那么我建议您切换到具有MLSD支持的proftpd,作为其mod_facts扩展的一部分。

答案 1 :(得分:2)

MLSD命令不是原始FTP标准的一部分。它仅在2007年的RFC 3659中添加。虽然现在还很久以前,但即使是现在一些主要的FTP服务器也不支持它。特别是IIS和vsftpd。

如果您需要时间戳但又需要与不支持MLSD命令的服务器通信,则有两种选择:

  1. 使用FTP.dirLIST命令)。并解析文件列表的专有格式以检索时间戳。

  2. 使用FTP.nlst检索文件(和文件夹)列表。然后,使用FTP.voidcmd为每个列出的文件发送MDTM commandMDTM以标准格式返回文件时间戳。

    显然,这种做法不如之前的方法有效,但您不必处理专有格式的目录列表。

    请注意,所有FTP服务器都不支持MDTM,但它比MLSD支持得更广泛,尽管这两个命令来自同一个RFC(3659)。特别是常见的Linux FTP服务器之一vsftpd支持MDTM,但不支持MLSD

  3. 有关实施这两种方法的代码,请参阅我的回答:
    How to get FTP file's modify time using Python ftplib