套接字关闭的Python SFTP问题-远程主机(10054)强制关闭了现有连接-如何继续?打破了这一进程,

套接字关闭的Python SFTP问题-远程主机(10054)强制关闭了现有连接-如何继续?打破了这一进程,,python,paramiko,pysftp,Python,Paramiko,Pysftp,因此,我有一个将一系列目录和文件sunbmit到服务的过程。该服务处理这些文件,然后将目录和输出文件返回到不同的目录中 例如,将有一个运行名为的父目录,然后是我们正在处理的每个日期的子目录。。i、 e: 输入 该服务在output下为运行名创建一个等效目录,然后在处理数据时创建相同的目录,因此,当它处理第一个文件时,如下所示: 输出 RunName 2020-06-01 当服务处理完所有文件后,它会在目录中放入一个包含所有日期的“完成”文件。一旦收到donefil

因此,我有一个将一系列目录和文件sunbmit到服务的过程。该服务处理这些文件,然后将目录和输出文件返回到不同的目录中

例如,将有一个运行名为的父目录,然后是我们正在处理的每个日期的子目录。。i、 e:

输入

该服务在output下为运行名创建一个等效目录,然后在处理数据时创建相同的目录,因此,当它处理第一个文件时,如下所示:

输出

RunName

    2020-06-01
    
    
当服务处理完所有文件后,它会在目录中放入一个包含所有日期的“完成”文件。一旦收到donefile,我的程序就可以进入下一个处理阶段

我想做的是确定完成处理的百分比,然后确定完成的时间

下面的代码完美无瑕,除了一件事

我经常

错误:paramiko.transport:套接字异常:远程主机(10054)强制关闭了现有连接 指向第二行(以“While”开头)

我需要做哪些更改来强制重新连接,然后在发生此错误时重试,并让while循环继续其“metty”方式

任何帮助都将不胜感激。。这让我很痛苦,因为它会中断一个更大的过程,并导致积压

srv = pysftp.Connection(host=servername, username=user,password=pwd,cnopts=cnopts)

while srv.isfile(donefile)==False:
    try:
        srv = pysftp.Connection(host=servername, username=user,password=pwd,cnopts=cnopts)
        dirnames=[]
        for i in srv.listdir(outputdir):
            if i[:6]=="date=2":
                dirnames.append(i)


        srv.close()
        if max(dirnames)!=lastname:
            print("Last Directory is: " ,max(dirnames), "out of", max(dirnamesin), " ",round((len(dirnames)/len(dirnamesin))*100), "pct done", datetime.datetime.now(), "run: ",run_name)
        lastname=max(dirnames)
        time.sleep(30)
        srv = pysftp.Connection(host=servername, username=user,password=pwd,cnopts=cnopts)
    except:
        print("connection error - will try again in 30 seconds")
        time.sleep(30)
        srv = pysftp.Connection(host=servername, username=user,password=pwd,cnopts=cnopts)
print ('done')

我会尝试重构它,以确保连接正确关闭,比如

while True:
    try:
        with pysftp.Connection(host=servername, username=user,password=pwd,cnopts=cnopts) as srv:
            if srv.isfile(donefile):
                break
            dirnames=[]
            for i in srv.listdir(outputdir):
                if i[:6]=="date=2":
                    dirnames.append(i)
        if max(dirnames)!=lastname:
            print("Last Directory is: " ,max(dirnames), "out of", max(dirnamesin), " ",round((len(dirnames)/len(dirnamesin))*100), "pct done", datetime.datetime.now(), "run: ",run_name)
        lastname=max(dirnames)
    except Exception:
        print("connection error - will try again in 30 seconds")
    time.sleep(30)
print('done')
while True:
    try:
        with pysftp.Connection(host=servername, username=user,password=pwd,cnopts=cnopts) as srv:
            if srv.isfile(donefile):
                break
            dirnames=[]
            for i in srv.listdir(outputdir):
                if i[:6]=="date=2":
                    dirnames.append(i)
        if max(dirnames)!=lastname:
            print("Last Directory is: " ,max(dirnames), "out of", max(dirnamesin), " ",round((len(dirnames)/len(dirnamesin))*100), "pct done", datetime.datetime.now(), "run: ",run_name)
        lastname=max(dirnames)
    except Exception:
        print("connection error - will try again in 30 seconds")
    time.sleep(30)
print('done')