ftplib MLSD命令发出500个未知命令

2024-04-24 19:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

ftplib.error_perm: 500 Unknown command

ftp服务器有问题吗?我需要在服务器上安装任何东西来运行这个命令吗


Tags: 文件命令服务器列表时间ftperrorls
2条回答

实际上,MLSD只是rfc3659中引入的一个协议扩展,某些FTP服务器可能不支持它。如果您关心可移植性,最好使用f.nlst()。在

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

MLSD命令不是原始FTP标准的一部分。它是在2007年的RFC 3659中添加的。虽然这还是一段时间以前的事了,但即使现在一些主要的FTP服务器也不支持它。尤其是IIS和vsftpd。在

如果需要时间戳,但需要与不支持MLSD命令的服务器对话,则有两个选项:

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

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

    显然这是一种比前一种方法效率低的方法,但是您不必处理目录列表的专有格式。在

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


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

相关问题 更多 >