【问题标题】:Retrieving data of generator object for file listing from FTP.mlsd()从 FTP.mlsd() 检索文件列表的生成器对象的数据
【发布时间】:2017-05-03 12:16:10
【问题描述】:

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】:

    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])
    

    【讨论】:

      【解决方案2】:

      只需转换成一个列表:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-04
        • 2012-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多