ftplib MLSD 命令给出 500 Unknown command

ftplib MLSD command gives 500 Unknown command

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

ftplib.error_perm: 500 Unknown command

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

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

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

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

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

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

  2. 对每个列出的文件使用 FTP.nlst to retrieve a list of files (and folders). Then, use FTP.voidcmd to send MDTM commandMDTM returns 标准格式的文件时间戳。

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

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


有关实现这两种方法的代码,请参阅我对以下内容的回答: