从ftp.mlsd()检索以用于文件列表的发电机对象的数据



ftp.mlsd((的python文档说,它返回产生元组的生成器对象。运行以下代码后,我将获得该对象的地址。此时,我认为我已经成功地从服务器收到了列表,因为它没有弹出任何错误(如果假设错误,请纠正我(。

这个问题的答案表明,我应该使用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上循环。

eg:

dirs=[]
nondirs=[]
for item in ftp.mlsd(dir):
    if item[1]['type'] == 'dir':
        dirs.append(item[0])
    else:
        nondirs.append(item[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()

最新更新