Python ftplib计时ou

2024-06-16 21:54:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用ftplib来获取文件列表并下载自上次检查以来的任何新文件。到目前为止,我试图运行的代码是:

#!/usr/bin/env python
from ftplib import FTP
import sys

host = 'ftp.***.com'
user = '***'
passwd = '***'

try:
    ftp = FTP(host)
    ftp.login(user, passwd)
except:
    print 'Error connecting to FTP server'
    sys.exit()

try:
    ftp.retrlines('LIST')
except:
    print 'Error fetching file listing'
    ftp.quit()
    sys.exit()

ftp.quit() 

每当我运行此命令时,当我试图检索列表时它就会超时。有什么想法吗?


Tags: 文件importhost列表sysexitftperror
2条回答

很可能是主动模式和被动模式之间的冲突。确保以下任一项为真:

  1. 服务器支持PASV模式,您的客户端正在设置PASV模式
  2. 如果服务器不支持被动模式,则防火墙必须支持主动模式FTP传输。

编辑:我查看了这些文档,发现在Python2.1和更高版本中,默认模式是被动模式。你在和哪个服务器说话,你知道它是否支持被动模式吗?

在活动模式(非PASV)下,客户端发送一个端口命令,告诉服务器在该端口上启动数据连接,这要求防火墙知道端口命令,以便它可以将传入的数据连接转发给您--很少有防火墙支持此操作。在被动模式下,客户端打开数据连接,服务器使用它(服务器在打开数据连接时是“被动的”)。

如果你不使用被动模式,做一个ftp.set_pasv(True),看看这是否有区别。

如果由于某种原因被动模式失败,请尝试:

ftp.set_pasv(False)

使用活动模式。

相关问题 更多 >