Проверка правильности 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 вызов.

Другие вопросы по тегам