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.
关于我哪里出错了?
答案 0 :(得分: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])
答案 1 :(得分:0)
只需转换为列表:
from ftplib import FTP
ftp = FTP('192.168.0.104')
ftp.login('testing','testing')
ftp.cwd('FTP_Test_Site')
myList = list(ftp.mlsd(path="", facts=["type", "size", "perm"]))
for item in myList:
print(item)
ftp.quit()