我写了一个python脚本连接到SFTP服务器。代码从文本文件获取其服务器凭据。 文字档案格式 IP,用户名,密码 IP2,USERNAME2,PASSWORD2 IP3,USERNAME3,PASSWORD3
现在此代码的问题是,如果PASSWORD2错误,那么它将引发身份验证错误,这是可以理解的,但是由于该错误,循环中断,进程停止,并且不处理文本文件的第3行。多线程可以解决该问题,就好像在多线程中,如果1个线程失败,其余部分可以继续运行。
但是我不了解python中的多线程。请帮助我将这段代码修改为多线程。
import os
import pysftp
import csv
import socket
from stat import S_IMODE, S_ISDIR, S_ISREG
import time
from threading import Thread
from time import sleep
import os.path
import shutil
import fileinput
import lock
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
try:
with open("text.txt", "r") as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
print(row)
IP=row[0]
myUsername=row[1]
myPassword=row[2]
txtfile=row[3]
remotepath=row[4]
localpath=row[5]
print(IP)
print(myUsername)
print(myPassword)
print(txtfile)
print(remotepath)
print(localpath)
with pysftp.Connection(host=IP, username=myUsername, password=myPassword, cnopts=cnopts) as sftp:
r = str(socket.gethostbyaddr(IP))
print("connection successful with " + r)
except:
print("failed")
答案 0 :(得分:1)
您的要求不需要多线程。
您所要做的就是将with
块放置在try catch中
for row in csv_reader
...
try:
with pysftp.Connection(host=IP, username=myUsername, password=myPassword,
cnopts=cnopts) as sftp:
<your logic>
except pysftp.SSHException:
print("Failed to connect")