You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ftplib.mlsd()获取FTP文件列表时报500 Unknown command的问题排查

解决FTP执行mlsd()时返回500 Unknown command的问题

兄弟,这个报错不是服务器缺组件,核心原因是你的FTP服务器不支持MLSD这个扩展命令。

MLSD是FTP的一个进阶命令(出自RFC 3659标准),专门用来标准化获取文件列表和元数据(比如时间戳、权限这些),但很多老旧的、轻量型的FTP服务(比如嵌入式设备上的简陋FTP、没开扩展的vsftpd)根本没做这个支持,所以会返回“未知命令”的错误。

给你几个可行的解决思路:

  • 思路1:用传统命令替代,手动解析信息
    如果服务器不支持MLSD,那就退回到dir()或者nlst()这类基础命令,再配合MDTM命令拿时间戳。举个Python代码例子:

    # 用dir()获取带详情的列表,可以传入回调函数处理输出
    def parse_dir(line):
        # 这里根据服务器返回的格式解析时间戳和文件名,不同服务器格式可能略有差异
        parts = line.split()
        timestamp = f"{parts[5]} {parts[6]} {parts[7]}"
        filename = parts[-1]
        print(f"文件: {filename}, 时间: {timestamp}")
    
    f.dir(parse_dir)
    
    # 或者用nlst()先拿文件名,再逐个查时间戳
    files = f.nlst()
    for file in files:
        # MDTM命令返回格式类似 "213 20240520123456"
        resp = f.sendcmd(f"MDTM {file}")
        timestamp = resp.split()[1]
        print(f"{file} 的时间戳: {timestamp}")
    
  • 思路2:如果是你自己的服务器,调整配置开启扩展
    比如用vsftpd的话,打开vsftpd.conf配置文件,确保有这一行:

    enable_opts=YES
    

    保存后重启vsftpd服务,再试mlsd()应该就没问题了。

  • 思路3:先确认服务器支持哪些命令
    可以先发送FEAT命令看看服务器的扩展支持情况:

    print(f.sendcmd("FEAT"))
    

    如果返回的内容里找不到MLSD,那就是服务器确实不支持这个命令,老老实实用思路1的方法就行。

总的来说,这个问题和“安装组件”没关系,就是服务器没支持MLSD这个进阶命令,要么换兼容的方法,要么调整服务器配置(如果你有权限的话)。

内容的提问来源于stack exchange,提问作者chriscka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:25:41