• Python自动化开发从浅入深-进阶(进程)


    今天的作业涉及到了进程,那么就用作业来说明进程的用法:

    这里我们定义了2个函数 getParamikoCmd 和 batchCmd,用于批量向远程服务器发送ssh命令,并返回执行结果。

    执行batchCmd进行一些用户交互和参数获取(这里是一组服务器分组信息),循环发起进程批量执行ssh命令,每个进程调用getParamikoCmd 函数进行ssh命令执行。

    进程之间是相互独立的,数据不会相互共享,这样可独立完成其任务而不会相互影响。

    def getParamikoCmd(groupName,serverName,ip,port,username,passwod,cmd,lock):
        '''
        被进程调用:处理批量ssh命令
        :param groupName:
        :param serverName:
        :param ip:
        :param port:
        :param username:
        :param passwod:
        :param cmd:
        :param lock:
        :return:
        '''
        #lock.acquire()
        objParamiko = MyParamiko(paramiko,ip,port,username,passwod)#创建一个处理paramiko的实例
        result,stdin,stderr = objParamiko.sshClientHandle(cmd)#获取ssh客户端句柄
        print("服务器分组{}---服务器名称:{}:
    {}
    *******************************************************".format(groupName,serverName,str(result,'utf-8')))#打印读取的信息
        #lock.release()
        #return result,stdin,stderr
    
    
    def  batchCmd(serverGroupDict):
        '''
        批量命令处理程序,菜单中的 2
        :param serverGroupDict: 服务器组信息字典
        :return:
        '''
        #print("batchCmd")
        cmdList = []
        groupName = ''
        serverName = []
        inpWho = input("向全部分组发送命令,请输入命令:'all'
    或 输入'服务器分组名称(如:group1)'向一个分组发送命令")
        inpCmd = input("发送命令>>>
    ")
        lock = Lock()
        if inpWho == 'all':#向所有服务器组成员发信息
            for k,v in serverGroupDict.items():#遍历组名称
                groupName = k
                for k1,v1 in v.items():#遍历服务器名称,生成服务器参数列表
                    serverName.append(k1)
                    cmdList.append(v1)
    
                for i in range(len(cmdList)):#遍历服务器参数列表
                    iPort = int(cmdList[i][1])#端口转为整数
                    #进程开始,传递:分组名,服务器名,ip port user password ,命令
              
    p = Process(target=getParamikoCmd,args=(groupName,serverName[i],cmdList[i][0],iPort,cmdList[i][2],cmdList[i][3],inpCmd,lock)) p.start()#启动进程 p.join() cmdList = [] serverName = [] else:#选择分组 for k,v in serverGroupDict.items(): if inpWho == k: groupName = k for k1,v1 in v.items(): serverName.append(k1) cmdList.append(v1) for i in range(len(cmdList)):#遍历服务器参数列表 iPort = int(cmdList[i][1])#端口转为整数 p = Process(target=getParamikoCmd,args=(groupName,serverName[i],cmdList[i][0],iPort,cmdList[i][2],cmdList[i][3],inpCmd,lock))#生成一个进程对象,inpCmd为要执行的命令 p.start()#启动进程 p.join() cmdList = [] serverName = []
  • 相关阅读:
    JavaScript实现简单轮播图动画
    洛谷2151 [SDOI2009]HH去散步(矩阵快速幂,边点互换)
    洛谷P2579 [ZJOI2005]沼泽鳄鱼(矩阵快速幂,周期)
    洛谷4159 [SCOI2009] 迷路(矩阵快速幂,拆点)
    洛谷5789 [TJOI2017]可乐(矩阵快速幂,Floyd思想)
    【封装】二维BIT
    【封装】替罪羊树
    【封装】Splay
    洛谷3521 [POI2011]ROT-Tree Rotations(线段树合并)
    数据结构:树的链式递归实现
  • 原文地址:https://www.cnblogs.com/whiggzhaohong/p/5295889.html
Copyright © 2020-2023  润新知