0

我想在 python中使用ftputil而不是。 在公共 ftp 服务器上,这两个库都可以正常工作:ftplib

host = 'ftp.avm.de'
user = 'anonymous'
passwd = ''


import ftputil
with ftputil.FTPHost(host, user, passwd) as ftp:
    print(ftp.getcwd(), ftp.listdir('.'))


import ftplib
with ftplib.FTP(host, user, passwd) as ftp:
    print(ftp.pwd(), ftp.nlst('.'))

输出:

/ ['archive', 'fritzbox', 'fritzpowerline', 'fritzwlan']
/ ['archive', 'fritzbox', 'fritzpowerline', 'fritzwlan']

如果我在本地网络中的 ftp 服务器 (Windows CE6) 上执行此操作,则输出ftputil为空,而ftplib正确列出了所有文件:

/ []
/ ['1', '2', '3']

我错过了什么?

4

1 回答 1

4

上面的观察可能是因为https://ftputil.sschwarzer.net/trac/ticket/110FTPHost.listdir如果 FTP 服务器不理解-a列出隐藏目录和文件的选项并将该选项解释为要列出的目录或文件,则结果中将丢失目录和文件。

创建实例后尝试设置use_list_a_option为:FalseFTPHost

ftp_host = ftputil.FTPHost(host, user, password)
ftp_host.use_list_a_option = False
# Use ftp_host as before.
...

在未来的 ftputil 版本 4.x 中,use_list_a_option将默认False避免此问题(请参阅链接的票证)。我不想在错误修复版本的早期进行此更改,因为这是一个向后不兼容的更改,并且可能会破坏当前工作的代码。

于 2018-12-29T21:23:05.417 回答