在处理大量任务时,我的其中一个脚本似乎与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的最佳方法吗?
提前谢谢
答案 0 :(得分:2)
这连接到服务器:
ftp = ftplib.FTP('CENSORED')
因此,NOOP
命令自然会成功,因为它不需要经过身份验证的连接。
您的connect_ftp
是正确的,除了您需要在connect
调用中指定主机名。