Проверка правильности FTP-соединения с помощью команды NOOP
У меня проблемы с одним из моих сценариев, которые, по-видимому, отключаются от моего FTP во время длинных пакетов заданий. Чтобы противостоять этому, я попытался создать модуль, как показано ниже:
def connect_ftp(ftp):
print "ftp1"
starttime = time.time()
retry = False
try:
ftp.voidcmd("NOOP")
print "ftp2"
except:
retry = True
print "ftp3"
print "ftp4"
while (retry):
try:
print "ftp5"
ftp.connect()
ftp.login('LOGIN', 'CENSORED')
print "ftp6"
retry = False
print "ftp7"
except IOError as e:
print "ftp8"
retry = True
sys.stdout.write("\rTime disconnected - "+str(time.time()-starttime))
sys.stdout.flush()
print "ftp9"
Я вызываю функцию, используя только:
ftp = ftplib.FTP('CENSORED')
connect_ftp(ftp)
Тем не менее, я проследил, как код работает с использованием print
строк, и при первом использовании модуля (до того, как FTP будет даже подключен) мой скрипт запускает ftp.voidcmd("NOOP") и не делает ничего, кроме него, поэтому изначально не предпринимается никаких попыток подключиться к FTP.
Выход:
ftp1
ftp2
ftp4
ftp success #this is ran after the module is called
Я признаю, что мой код не самый лучший или самый красивый, и я еще ничего не реализовал, чтобы убедиться, что я не буду постоянно подключаться, если мне не удается восстановить соединение, но я не могу понять, почему это не работает для жизнь меня, поэтому я не вижу смысла в расширении модуля еще. Это даже лучший подход для подключения / повторного подключения к FTP?
заранее спасибо
1 ответ
Это подключается к серверу:
ftp = ftplib.FTP('CENSORED')
Итак, естественно, NOOP
Команда выполнена успешно, так как ей не требуется аутентифицированное соединение.
Ваш connect_ftp
правильно, за исключением того, что вам нужно указать имя хоста в вашем connect
вызов.