从FTP.mlsd()检索文件列表的生成器对象的数据

问题描述 投票:2回答:1

Python documentation for FTP.mlsd()说它返回一个生成一个元组的生成器对象。运行以下代码后,我获取该对象的地址。在这一点上,我假设我已成功从我的服务器收到列表,因为它没有弹出任何错误(如果假设错误,请纠正我)。

this question的答案表明我应该使用next()来获取对象中的值。但是,这样做表明错误说ftplib.error_perm: 501 Option not understood.

from ftplib import FTP
ftp = FTP('192.168.0.104')
ftp.login('testing','testing')
ftp.cwd('FTP_Test_Site')

temp = ftp.mlsd(path="", facts=["type", "size", "perm"])
print(temp)
print(next(temp))

ftp.quit()

产量

<generator object FTP.mlsd at 0x7f46f9438518>
Traceback (most recent call last):
  File "BackUp.py", line 18, in <module>
    print(next(temp))
  File "/usr/lib/python3.5/ftplib.py", line 589, in mlsd
    self.sendcmd("OPTS MLST " + ";".join(facts) + ";")
  File "/usr/lib/python3.5/ftplib.py", line 272, in sendcmd
    return self.getresp()
  File "/usr/lib/python3.5/ftplib.py", line 245, in getresp
    raise error_perm(resp)
ftplib.error_perm: 501 Option not understood.

我知道哪里出错了?

python ftp
1个回答
0
投票

ftp mlsd是一个发电机。所以你必须遍历mlsd。

例如:

dirs=[]
nondirs=[]
for item in ftp.mlsd(dir):
    if item[1]['type'] == 'dir':
        dirs.append(item[0])
    else:
        nondirs.append(item[0])
© www.soinside.com 2019 - 2024. All rights reserved.