检查Python的FTP连接(Checking a Python FTP connection)

2019-08-17 06:39发布

我从我下载许多文件和之间的处理他们的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 ###

如何检查的情况下,我的FTP连接它时超时### do some parsing ###线?

Answer 1:

发送NOOP命令。 这确实只是检查连接仍在继续,如果你这样做定期它可以保持连接。

例如:

   conn.voidcmd("NOOP")

如果没有与连接出现问题,则FTP对象将抛出异常。 您可以从看到的文档即抛出异常,如果有一个错误:

socket.error和IO错误:这些是由插座连接提高,最有可能你有兴趣的人。

例外ftplib.error_reply:当从服务器接收到一个意想不到的回答异常升高。

例外ftplib.error_temp:异常当接收到错误代码(在范围400-499响应码)标志着一个临时错误引发。

例外ftplib.error_perm:异常当接收到错误代码(在范围500-599响应码)标志着一个永久的错误引发。

例外ftplib.error_proto:异常当从一个不适合的文件传输协议的响应规格的服务器,即得到的答复与范围内的1-5数字开始上升。

因此,你可以使用try-catch块检测错误,并相应地处理它。

例如代码将赶上一个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


文章来源: Checking a Python FTP connection
标签: python ftplib