Проверка FTP-соединения Python
У меня есть 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 ###
линии?
1 ответов
отправить команду NOOP. Это не делает ничего, кроме проверки того, что соединение все еще происходит, и если вы делаете это периодически, оно может поддерживать соединение.
например:
conn.voidcmd("NOOP")
Если есть проблема с подключением, то FTP-объект выдаст исключение. Вы можете видеть из документация что исключения, если есть ошибка:
гнездо.ошибка IOError: эти подняты гнездом связи и, скорее всего, те, которые вас интересуют.
исключение ftplib.error_reply: исключение возникает, когда неожиданный ответ, полученный от сервера.
исключение ftplib.error_temp: исключение возникает при получении кода ошибки, обозначающего временную ошибку (коды ответа в диапазоне 400-499).
исключение ftplib.error_perm: исключение возникает, когда код ошибки означает получена постоянная ошибка (коды ответов в диапазоне 500-599).
исключение 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