我在脚本中运行的代码类似于以下代码:
try:
s = ftplib.FTP('xxx.xxx.xxx.xxx','username','password')
except:
print ('Could not contact FTP serer')
sys.exit()
如果FTP站点无法访问,脚本几乎似乎“挂起”...在sys.exit()似乎被调用之前平均需要大约75秒......我知道75秒可能非常主观的,并依赖于系统运行...但有没有办法让python只试一次,如果不成功,立即退出?我使用的平台是Mac OS X 10.5 / python 2.5.1。
答案 0 :(得分:7)
从2.6开始,FTP constructor
有一个可选的timeout
参数:
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])
返回FTP类的新实例。当给出主机时,方法调用connect(host)。当给出用户时,另外调用login(user,passwd,acct)方法(其中passwd和acct默认为空字符串,如果没有给出)。 可选的timeout参数指定阻塞操作的超时秒数,如连接尝试(如果未指定,将使用全局默认超时设置)。
在2.6版中更改:添加了超时。
从版本2.3及更高版本开始,可以使用全局默认超时:
socket.setdefaulttimeout(timeout)
为新套接字对象设置浮动秒的默认超时。值为None表示新套接字对象没有超时。首次导入套接字模块时,默认值为None。
2.3版中的新功能。
答案 1 :(得分:2)
因为您使用的是python 2.5,所以可以使用以下命令为所有套接字操作(包括FTP请求)设置全局超时:
socket.setdefaulttimeout()
(这是在Python 2.3中添加的)
答案 2 :(得分:1)
答案 3 :(得分:1)
答案 4 :(得分:1)
对那些建议使用'socket.setdefaulttimeout()'的评论。在内部,ftplib使用sock.makefile()。根据python文档,你不应该混淆makefile()和超时。特别: http://docs.python.org/library/socket.html#socket.socket.makefile
当然,我不能说我已经看到任何问题,只是它让我担心。