我想在Python中使用ftputil
而不是ftplib
。
在公共ftp服务器上,两个库都可以正常运行:
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']
我想念什么?
答案 0 :(得分:2)
上面的观察可能是由于https://ftputil.sschwarzer.net/trac/ticket/110造成的。如果FTP服务器不了解用于列出隐藏目录和文件的FTPHost.listdir
选项,并且将该选项解释为要列出的目录或文件,则-a
结果中的目录和文件将丢失。
在创建use_list_a_option
实例后,尝试将False
设置为FTPHost
:
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
,以避免出现此问题(请参阅链接的票证)。我不想在错误修正版本中更早进行更改,因为这是向后不兼容的更改,并且可能会破坏当前工作的代码。