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.
我知道哪里出错了?
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])