Python 3中的ftp目录

时间:2013-11-11 01:23:35

标签: python ftp

我在Python 3.3中有以下代码:

ftpHost="myhost"
link=ftplib.FTP(ftpHost)
link.login(user="me",passwd="alsome")
t=link.nlst()
link.quit()
print(t)

我得到的输出是

['.','..','dir1','dir2']

在Python 3文档中,写道FTP.nlst已经“从版本3.3开始被弃用:使用mlsd()代替”。我试过的时候

ftpHost="myhost"
link=ftplib.FTP(ftpHost)
link.login(user="me",passwd="alsome")
t=link.mlsd()
link.quit()
print(t)

我得到的输出是

<generator object mlsd at 0x0000000002A0F120>

这不是理想的答案。我无法弄清楚在哪里可以获得目录列表。如何使用mlsd获取目录列表?

如果我尝试@fourtheye的建议并改为     T =列表(link.mlsd)

我得到的错误是

Traceback (most recent call last):
  File "C:/xyz/python-test/python-test.py", line 17, in <module>
    main()
  File "C:/xyz/python-test/python-test.py", line 12, in main
    t=list(link.mlsd())
  File "C:\WinPython-64bit-3.3.2.1\python-3.3.2.amd64\lib\ftplib.py", line 556, in mlsd
    self.retrlines(cmd, lines.append)
  File "C:\WinPython-64bit-3.3.2.1\python-3.3.2.amd64\lib\ftplib.py", line 446, in retrlines
    with self.transfercmd(cmd) as conn, \
  File "C:\WinPython-64bit-3.3.2.1\python-3.3.2.amd64\lib\ftplib.py", line 386, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "C:\WinPython-64bit-3.3.2.1\python-3.3.2.amd64\lib\ftplib.py", line 352, in ntransfercmd
    resp = self.sendcmd(cmd)
  File "C:\WinPython-64bit-3.3.2.1\python-3.3.2.amd64\lib\ftplib.py", line 259, in sendcmd
    return self.getresp()
  File "C:\WinPython-64bit-3.3.2.1\python-3.3.2.amd64\lib\ftplib.py", line 233, in getresp
    raise error_perm(resp)
ftplib.error_perm: 500 MLSD not understood

2 个答案:

答案 0 :(得分:3)

生成器不会将整个结果保留在内存中。当被要求使用next函数时,将生成结果。要将值作为列表获取,请使用带有list的{​​{1}}函数,该函数将在内部调用生成器对象上的link.mlsd()

只需更改

next

t=link.mlsd()

答案 1 :(得分:1)

谁运行FTP主机? 500 MLSD not understood表示他们不支持MLSD命令。这是FTP命令集的后续扩展,因此它们刚刚过时。规范在这里:

http://tools.ietf.org/html/rfc3659

除非他们升级到&#34;现代&#34; FTP版本,继续使用nlst()