2010-03-01 74 views
4

我有类似于下面的脚本运行的代码:的Python:控制超时长度

try: 
    s = ftplib.FTP('xxx.xxx.xxx.xxx','username','password') 

except: 
    print ('Could not contact FTP serer') 
    sys.exit() 

如果FTP站点无法访问,脚本几乎好像“挂” ......它正在约75在sys.exit()出现被调用之前,平均秒数......我知道75秒可能是非常主观的,并且依赖于系统运行......但有没有办法让python只尝试一次,如果不成功,立即退出?我使用的平台是Mac OS X 10.5/python 2.5.1。

回答

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)

坐落在浮动秒为新的socket对象的默认超时。值None表示新的套接字对象没有超时。首次导入套接字模块时,默认值为None。

版本2.3中的新功能。

+0

谢谢,作为@SilentGhost提到...我使用2.5.1 ....由于所有客户端机器都运行Mac OS X 10.5.....并且无法触及安装版本的python – cit 2010-03-01 12:45:36

+0

Lucky,因此您可以使用2.3和更高版本设置全局套接字超时。 – gimel 2010-03-01 13:04:08

1

,如果你看一下doc,有一个超时参数。

class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])¶

也许你可以使用它。

+1

这是python 2.6的功能,OP使用py2.5.1 – SilentGhost 2010-03-01 12:40:49

2

,因为你是在Python 2.5中,你可以通过使用为所有插座操作(包括FTP请求)全球超时:

socket.setdefaulttimeout() 

(这在Python 2.3中加入)