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
命令的服务器通信,您有两个选择:
使用FTP.dir
(LIST
命令)。并解析文件列表的专有格式以检索时间戳。
对每个列出的文件使用 FTP.nlst
to retrieve a list of files (and folders). Then, use FTP.voidcmd
to send MDTM
command。 MDTM
returns 标准格式的文件时间戳。
显然,这种方法不如以前的方法有效,但您不必处理专有格式的目录列表。
请注意,并非所有 FTP 服务器都支持 MDTM
,但它比 MLSD
得到更广泛的支持,尽管这两个命令都来自相同的 RFC (3659)。特别是一种常见的 Linux FTP 服务器,vsftpd,支持 MDTM
,但不支持 MLSD
。
有关实现这两种方法的代码,请参阅我对以下内容的回答:
我一直在使用 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
命令的服务器通信,您有两个选择:
使用
FTP.dir
(LIST
命令)。并解析文件列表的专有格式以检索时间戳。对每个列出的文件使用
FTP.nlst
to retrieve a list of files (and folders). Then, useFTP.voidcmd
to sendMDTM
command。MDTM
returns 标准格式的文件时间戳。显然,这种方法不如以前的方法有效,但您不必处理专有格式的目录列表。
请注意,并非所有 FTP 服务器都支持
MDTM
,但它比MLSD
得到更广泛的支持,尽管这两个命令都来自相同的 RFC (3659)。特别是一种常见的 Linux FTP 服务器,vsftpd,支持MDTM
,但不支持MLSD
。
有关实现这两种方法的代码,请参阅我对以下内容的回答: