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>
提出两个问题:
- 是否因为ftplib和Windows命令行FTP是不同的客户端,实现的命令存在差异?
- 如果是,Windows命令行中与NLST等效的命令是什么?
解答
是的,两者确实存在命令差异。Python的ftplib调用的是FTP协议层面的NLST命令,这是FTP标准协议定义的原生命令,用于获取目录内的纯文件名列表;而Windows命令行的
ftp客户端是独立的交互程序,它有自己封装的一套命令,部分命令和FTP原生协议命令名称不一致,甚至不直接暴露某些原生协议命令。Windows命令行ftp客户端中,和NLST等效的命令是
ls。执行ls命令会返回仅包含文件名的简洁列表,和ftplib中nlst()方法获取的结果一致。你可以直接在ftp交互窗口中输入:
ftp> ls
就能得到和NLST相同的纯文件名输出。
内容的提问来源于stack exchange,提问作者DevelBase2
相关产品推荐
相关产品推荐

