Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接SFTP服务器时python中的多线程_Python_Python 3.x_Python Multithreading_Pysftp - Fatal编程技术网

连接SFTP服务器时python中的多线程

连接SFTP服务器时python中的多线程,python,python-3.x,python-multithreading,pysftp,Python,Python 3.x,Python Multithreading,Pysftp,我编写了一个python脚本来连接到SFTP服务器。代码从文本文件获取其服务器凭据。 文本文件格式 IP、用户名、密码 IP2,用户名2,密码2 IP3,用户名3,密码3 现在这个代码的问题是,如果PASSWORD2是错误的,那么它将引发身份验证错误,这是可以理解的,但是由于这个错误,循环中断,进程停止,它不处理文本文件的第3行。多线程可以解决这个问题,就像在多线程中,如果一个线程失败,其余线程继续运行一样 但是我不知道python中的多线程。请帮助我将此代码修改为多线程 import os i

我编写了一个python脚本来连接到SFTP服务器。代码从文本文件获取其服务器凭据。 文本文件格式 IP、用户名、密码 IP2,用户名2,密码2 IP3,用户名3,密码3

现在这个代码的问题是,如果PASSWORD2是错误的,那么它将引发身份验证错误,这是可以理解的,但是由于这个错误,循环中断,进程停止,它不处理文本文件的第3行。多线程可以解决这个问题,就像在多线程中,如果一个线程失败,其余线程继续运行一样

但是我不知道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")

您的需求不需要多线程

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")
您所要做的就是将
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")
csv_读取器中的行的

...
尝试:
使用pysftp.Connection(主机=IP,用户名=myUsername,密码=myPassword,
cnopts=cnopts)作为sftp:
除了pysftp.SSHException:
打印(“连接失败”)

如果一个线程由于密码错误而失败,其他线程将如何继续运行?我对多线程不太了解,我需要修改,以便在文件中有10个IP。因此,它为每个IP创建10个线程,如果“线程2”由于身份验证错误而失败,其他线程将继续运行。python初学者可以使用多线程。我需要使用它,因为项目要求Spycharm在最后一行显示未解析的“log”引用。我还需要导入什么模块?我刚刚添加了日志变量供您参考。您只需将给定代码移动到一个新方法,并将其提交给线程执行即可。您仍然需要使用try-catch块才能完全退出。有关更多信息,请查看上面的链接