返回顶部
首页 > 资讯 > 后端开发 > Python >python多线程paramiko
  • 142
分享到

python多线程paramiko

多线程pythonparamiko 2023-01-31 07:01:21 142人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

初学python,网上找发些关于paramiko实现Python多线程的功能,发现相互抄袭占多.别人的总归是别人的,也同时为了练习技术,就自己写了一个基于paramiko免密认证多线程并发脚本.与大家共勉.使用上的问题的同学也可以联系我.刚

初学python,网上找发些关于paramiko实现Python多线程的功能,发现相互抄袭占多.别人的总归是别人的,也同时为了练习技术,就自己写了一个基于paramiko免密认证多线程并发脚本.与大家共勉.使用上的问题的同学也可以联系我.刚开始写基本上是纯shell脚本的思维方式.有经验的同学也欢迎指点一二


#脚本功能简介

1. 同时支持文件传输和命令执行功能
2. 部分代码增加异常判断功能
3. 支持空行和#注释功能
4. 支持多并发执行

#缺陷

1. 输出无颜色标识
2. 无执行结果汇总功能
3. 远程执行的部分命令需加绝对路径(有经验的同学指点下)
4. 用map实现的多线程,非多进程

!!!NOTE!!!

脚本没有线上应用经历,没有经过严格压测,纯属学习功用,使用前请通读自定义修改,如带来运营上损失,与作者无关,

#command内容

file:::/home/linuxlst/pylear/paramiko/sftp/sftp_v2.py /home/linuxlst/sftp_v2.py put
com:::ls /home/linuxlst/sftp_v2.py /home/linuxlst/datafile/songtaoli/paramiko_mabs4.txt
com:::/sbin/ifconfig > /home/linuxlst/ifconfig.log

#com:::/sbin/ifconfig > /home/linuxlst/ifconfig.log


#iplist内容

192.168.37.142 linuxlst redhat 22
192.168.37.144 linuxlst redhat 22
#192.168.37.144 linuxlst redhat 22


#代码内容

#!/bin/env  python
#function: upload files throuth ssh protocal and excute command
#-*- conding = utf-8 -*-

import paramiko
import sys
import threading
import os
import re
from multiprocessing.dummy import Pool as ThreadPool
from time import sleep,ctime


MULTI_PROC = 2  #process
pool = ThreadPool(MULTI_PROC)

def Usage():
    print '*' * 50
    print '''
Usage: 
     mabs.py command iplist

*****cat command*****
com:::ls /home/linuxlst/datafile/songtaoli/
file:::/home/linuxlst/pylear/paramiko/sftp/sftp_v2.py /home/linuxlst/sftp_v2.py put

*****cat iplist*****
192.168.37.142 linuxlst redhat 22
    '''
    print '*' * 50

def FileUsage():
    print "Usage:"
    print "    file:::/home/linuxlst/pylear/paramiko/sftp/sftp_v2.py /home/linuxlst/sftp_v2.py put"


def FileTran(comm,TranType,hostname,username,pwd,port):
    try:
        #print 'hostname:',hostname
        #print 'port:',port
        t = paramiko.Transport((hostname,int(port)))
        t.connect(username=username,passWord=pwd)
        sftp = paramiko.SFTPClient.from_transport(t)
        filetran = comm.split(' ')
        local = filetran[0].strip('\n')
        remote = filetran[1].strip('\n')
        if TranType == "put":
            #print '***put file %s to remote %s' % (local,remote)
            sftp.put(local,remote)
        elif TranType == "get":
            #print '***get remote file %s to local %s' % (remote,local)
            sftp.get(remote,local)
        else:
            print "ERROR:lack of tran TranType."
            sys.exit()
        t.close()
    except Exception, e:
        traceback.print_exc()
        try:
            t.close()
        except:
            pass
 
def Execu(hostname,username,pwd,port,command):
    try:
        #print '***Run command {%s} on host {%s} by username {%s}' % (command,hostname,username)
        ssh = paramiko.SSHClient()
        ssh.load_system_host_keys()
        #ssh.set_missing_host_key_policy(paramiko.MissingHosTKEyPolicy())
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(hostname,port=int(port),username=username,password=pwd)
        stdin,stdout,stderr = ssh.exec_command(command)
        #stdin,stdout,stderr = ssh.exec_command('hostname')
        #print stdin.read()
        print stdout.read()
        print stderr.read()
    except Exception,e:
        print 'change file auth or excute file failed:',e
    ssh.close()

def main(config):
    ip = config[0]
    username = config[1]
    pwd = config[2]
    port = config[3]
    comm = config[4]
    print ip,username,pwd,port,comm
    maincomm = [] 
    TranType = ''
    sp = comm.split(':::')
    if sp[0] == "com":
        #maincomm = [sp[1].strip('\n'),'com']
        commandline = sp[1].strip('\n')
        Execu(ip,username,pwd,port,commandline)  
    elif sp[0] == "file":
        m = sp[1].strip('\n')
        if re.search('put',m):
            TranType = 'put'
            #maincomm = [sp[1].strip('\n'),TranType]
            commandline = sp[1].strip('\n')
            FileTran(commandline,TranType,ip,username,pwd,port)
        elif re.search('get',m):
            TranType = 'get'
            #maincomm = [sp[1].strip('\n'),TranType]
            commandline = sp[1].strip('\n')
            FileTran(commandline,TranType,ip,username,pwd,port)
        else:
            print 'ERROR:lack of tran TranType'
            FileUsage()
            sys.exit()
    else:
        print 'ERROR:lack com or file mark'
        FileUsage()
        sys.exit()   


def MyMul():
    threads = []
    com = open(sys.argv[1],'r')  #command file
    confs  = open(sys.argv[2],'r')  #config file
    confs.seek(0)
    config = []
    for conf in confs:
        com.seek(0)
        #print ip,username,port
        if not conf.startswith('#') and len(conf) > 1:
            ip,username,pwd,port = conf.strip('\r\n').split(' ')
            #lconf += 1
            for comm in com:
                if not comm.startswith('#') and len(comm) > 1:
                    config.append([ip,username,pwd,port,comm])

    pool.map(main,config)
    pool.close()
    pool.join()

if len(sys.argv) != 3:
    Usage()
    os.sys.exit()

if __name__ == '__main__':
    MyMul()


--结束END--

本文标题: python多线程paramiko

本文链接: https://lsjlt.com/news/191062.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python多线程paramiko
    初学python,网上找发些关于paramiko实现python多线程的功能,发现相互抄袭占多.别人的总归是别人的,也同时为了练习技术,就自己写了一个基于paramiko免密认证多线程并发脚本.与大家共勉.使用上的问题的同学也可以联系我.刚...
    99+
    2023-01-31
    多线程 python paramiko
  • python paramiko
    Win7下Python2.7环境安装paramiko模块Win7下Python2.7环境安装paramiko模块,有需要的朋友可以参考下近段时间用Python写一个小东西,每次修改代码后要手工上传到服务器,觉得很麻烦,虽然有WinSCP,找...
    99+
    2023-01-31
    python paramiko
  • python多线程————3、多线程间通
    1、共享变量 #通过共享变量 import time import threading url_list = [] def get_detail_html(): global url_list while True: ...
    99+
    2023-01-31
    多线程 python
  • python多线程
    Python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的...
    99+
    2023-01-30
    多线程 python
  • Python 多线程
      文章来源:https://www.runoob.com/python/python-multithreading.html 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的...
    99+
    2023-01-31
    多线程 Python
  • python—多线程
    一、多线程实例  线程时应用程序中工作的最小单位,python中提供了threading模块来对多线程操作,一般多核cpu采用多进程方式,单核才采用多线程方式  方法:  将要执行的方法threading.Thread作为参数传给构造方法(...
    99+
    2023-01-31
    多线程 python
  • Python多线程编程,线程锁
    多线程threading 模块创建线程创建自己的线程类线程通信线程同步互斥方法线程锁@需要了解!!!   什么是线程? 线程也是一种多任务的编程方法,可以利用计算机多核资源完成程序的并发运行。 线程又被称为轻量级进程 ...
    99+
    2023-01-30
    线程 多线程 Python
  • python多线程socket编程--多
    Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以使用,如下: 1、客户端 #!/usr/bin/env python #coding...
    99+
    2023-01-31
    多线程 python socket
  • 【python】--paramiko 连
    在使用AWS(亚马逊)的云机器, AWS 管理面板中生成密钥。使用python的Paramiko 连接服务器import paramiko k = paramiko.RSAKey.from_private_key_file("/home/e...
    99+
    2023-01-31
    python paramiko
  • python 多线程编程
    使用回调方式 import time def countdown(n): while n > 0: print('T-minus', n) n -= 1 time.sleep...
    99+
    2023-01-31
    多线程 python
  • Python多线程编程
      一个串行程序需要从每个I/O终端通道来检测用户的输入,然而程序在读取过程中不能阻塞,因为用户输入的到达时间的不确定,并且阻塞会妨碍其他I/O通道的处理。由于串行程序只有唯一的执行线程,因此它需要兼顾执行的多个任务,确保其中的某个任务不会...
    99+
    2023-01-31
    多线程 Python
  • python的多线程
    python多线程 一、线程的概念 线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有多线程编程时,一个进程相当于一个主线程;当有多线...
    99+
    2023-09-01
    python 开发语言 pycharm
  • python多线程-Semaphore(
    Semaphore(value=1) Semaphore对象内部管理一个计数器,该计数器由每个acquire()调用递减,并由每个release()调用递增。计数器永远不会低于零,当acquire()发现计数器为零时,线程阻塞,等待其他线...
    99+
    2023-01-30
    多线程 python Semaphore
  • python之多线程
    一、threading 模块 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二、开启线程的两种方式 from threading import Thread import ti...
    99+
    2023-01-30
    之多 线程 python
  • python 多线程+queue
    python的queue设计的是线程安全的,所以大家伙放心用吧! python多线程的一种简单的实现如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import threadi...
    99+
    2023-01-31
    多线程 python queue
  • Python 多线程 multithr
    【Python】python 多线程两种实现方式 目前python提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对threa...
    99+
    2023-01-31
    多线程 Python multithr
  • python多线程threading
    本文通过 4个example 介绍python中多线程package —— threading的常用用法, 包括调用多线程, 同步队列类Queue, Ctrl+c结束多线程。 example1. 调用10个线程, 分别打印0~...
    99+
    2023-01-31
    多线程 python threading
  • Python 多线程 threadin
    #!/usr/bin/python # -*- coding: utf-8 -*- __author__ = 'gaogd' ''' ### 多进程 import threading import time def run(num)...
    99+
    2023-01-31
    多线程 Python threadin
  • python threadpool多线程
            在写爬虫下载一个网页中的多个链接文件时(http://blog.sina.com.cn/s/blog_740773f40100ywyg.html  ),使用多线程会提高下载速度。         使用线程池能够简单的解决这...
    99+
    2023-01-31
    多线程 python threadpool
  • python多线程和多进程(二)
    ---恢复内容开始--- 一、多进程   1、multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。 import time from mult...
    99+
    2023-01-30
    多线程 进程 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作