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

时间:2017-05-03 12:16:10

标签: python ftp

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.

关于我哪里出错了?

2 个答案:

答案 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()