使用NOOP命令检查FTP连接是否有效

时间:2018-10-31 11:48:34

标签: python ftp ftplib 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 个答案:

答案 0 :(得分:2)

连接到服务器:

ftp = ftplib.FTP('CENSORED')

因此,NOOP命令自然会成功,因为它不需要经过身份验证的连接。

您的connect_ftp是正确的,除了您需要在connect调用中指定主机名。