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

Python ftplib的NLST命令可运行,Windows命令行FTP无法执行?

问题描述

我通过Python的ftplib搭建了一个API来连接FTP服务器,代码如下:

from ftplib import FTP    

@app.route('/api/ftp/list', methods=['GET'])
def ftp_list():
    remote_dir = request.args.get('remote_dir', '/')

    try:
        ftp = ftp_connect()
        #ftp.cwd(remote_dir)
        files = ftp.nlst()
        ftp.quit()
        return jsonify({'files': files}), 200
    except Exception as e:
        return jsonify({'error': str(e)}), 500

该代码通过NLST方法可成功获取文件列表。但当我通过Windows命令行连接同一FTP服务器时,执行nlst命令会提示“Invalid command”:

ftp> dir
200 'PORT' OK.
125 Data connection already open; starting 'BINARY' transfer.
-rw------- 1 tester users         95 Sep 19 20:34 testfile.txt
226 Transfer complete.
ftp: 67 bytes received in 0.00Seconds 67000.00Kbytes/sec.
ftp> nlst
Invalid command.
ftp>

提出两个问题:

  1. 是否因为ftplib和Windows命令行FTP是不同的客户端,实现的命令存在差异?
  2. 如果是,Windows命令行中与NLST等效的命令是什么?

解答
  1. 是的,两者确实存在命令差异。Python的ftplib调用的是FTP协议层面的NLST命令,这是FTP标准协议定义的原生命令,用于获取目录内的纯文件名列表;而Windows命令行的ftp客户端是独立的交互程序,它有自己封装的一套命令,部分命令和FTP原生协议命令名称不一致,甚至不直接暴露某些原生协议命令。

  2. Windows命令行ftp客户端中,和NLST等效的命令是ls。执行ls命令会返回仅包含文件名的简洁列表,和ftplib中nlst()方法获取的结果一致。你可以直接在ftp交互窗口中输入:

ftp> ls

就能得到和NLST相同的纯文件名输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:55:55