检查Python FTP连接

时间:2013-03-02 03:53:25

标签: python ftplib

我有一个FTP连接,我从中下载了许多文件并在其间处理它们。我希望能够检查我的FTP连接之间没有超时。所以代码看起来像:

conn = FTP(host='blah')
conn.connect()
for item in list_of_items:
    myfile = open('filename', 'w')
    conn.retrbinary('stuff", myfile)
    ### do some parsing ###

如果在### do some parsing ###行中超时,我如何检查我的FTP连接?

1 个答案:

答案 0 :(得分:19)

发送NOOP命令。这只会检查连接是否仍然存在,如果你定期这样做,它可以使连接保持活动状态。

例如:

   conn.voidcmd("NOOP")

如果连接出现问题,则FTP对象将抛出异常。您可以在documentation中看到,如果出现错误,则会抛出异常:

socket.error和IOError:这些是由套接字连接引发的,很可能是您感兴趣的。

exception ftplib.error_reply:从服务器收到意外回复时引发异常。

exception ftplib.error_temp:当收到表示临时错误的错误代码(响应代码在400-499范围内)时引发异常。

exception ftplib.error_perm:当收到表示永久性错误的错误代码(响应代码在500-599范围内)时引发异常。

exception ftplib.error_proto:当从服务器收到不符合文件传输协议响应规范的回复时引发的异常,即以1-5范围内的数字开头。

因此,您可以使用try-catch block来检测错误并相应地处理错误。

例如,此代码示例将捕获IOError,告诉您它,然后重试该操作:

retry = True
while (retry):
    try:
        conn = FTP('blah')
        conn.connect()
        for item in list_of_items:
            myfile = open('filename', 'w')
            conn.retrbinary('stuff', myfile)   
            ### do some parsing ###

        retry = False

    except IOError as e:
        print "I/O error({0}): {1}".format(e.errno, e.strerror)
        print "Retrying..."
        retry = True