Проверка правильности FTP-соединения с помощью команды NOOP - PullRequest
0 голосов
/ 31 октября 2018

У меня проблемы с одним из моих сценариев, которые, по-видимому, отключаются от моего 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 Ответ

0 голосов
/ 31 октября 2018

Этот подключает к серверу:

ftp = ftplib.FTP('CENSORED')

Итак, команда NOOP, естественно, выполняется успешно, так как ей не требуется аутентифицированное соединение.

Ваш connect_ftp правильный, за исключением того, что вам нужно указать имя хоста в вашем connect вызове.

...