Python SFTP 问题与套接字关闭 - 现有连接被远程主机强行关闭 (10054) - 如何继续?中断进程,
Python SFTP issue With Sockets Closing - An existing connection was forcibly closed by the remote host (10054) - How to continue? Breaks process,
所以我有一个过程,我将一系列目录和文件发送到服务。该服务处理这些文件,然后 returns 目录和输出文件到不同的目录
例如,将有一个名称为 运行 的父目录,然后是我们正在处理的每个日期的子目录。即:
输入
RunName
2020-06-01
2020-06-02
2020-06-03
该服务在输出下为 运行 名称创建一个等效目录,然后在处理数据时创建相同的目录,因此当它处理第一个文件时,它看起来像这样:
输出
RunName
2020-06-01
当服务处理完所有文件后,它会在目录中放置一个包含所有日期的“完成”文件。一旦收到完成文件,我的程序就可以进入下一阶段的处理。
我想做的是确定处理完成的百分比,然后确定何时完成。
除了一件事,下面的代码可以完美运行
我经常得到
错误: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')
所以我有一个过程,我将一系列目录和文件发送到服务。该服务处理这些文件,然后 returns 目录和输出文件到不同的目录
例如,将有一个名称为 运行 的父目录,然后是我们正在处理的每个日期的子目录。即:
输入
RunName
2020-06-01
2020-06-02
2020-06-03
该服务在输出下为 运行 名称创建一个等效目录,然后在处理数据时创建相同的目录,因此当它处理第一个文件时,它看起来像这样:
输出
RunName
2020-06-01
当服务处理完所有文件后,它会在目录中放置一个包含所有日期的“完成”文件。一旦收到完成文件,我的程序就可以进入下一阶段的处理。
我想做的是确定处理完成的百分比,然后确定何时完成。
除了一件事,下面的代码可以完美运行
我经常得到
错误: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')