Отправить команду NOOP. Это не делает ничего, кроме проверки того, что соединение все еще продолжается, и если вы делаете это периодически, оно может поддерживать соединение в живом режиме.
Например:
conn.voidcmd("NOOP")
Если есть проблема с подключением, то объект FTP будет сгенерировано исключение. Вы можете видеть из documentation, что исключения могут отбрасываться, если есть ошибка:
socket.error и IOError:. Они поднимаются на сокет-соединение и, скорее всего, те, что вы заинтересованы в
exception 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
'ftplib', кажется, не подходит принцип Pythonic, что должен быть один очевидный способ сделать что-то - или, по крайней мере, вы должны были бы дать мне это на 'voidcmd ('NOOP')' – Axeman