43tt 发表于 2014-5-12 09:34:27

原创python多线程批量管理工具batch(不断完善)

#!/usr/bin/env python
import threading
import time
import paramiko
import os,sys
from ip import ip_list,web_server,ip_msg
from optparse import OptionParser
from ssh_co.cfg.config import host_msg
def opts():
   parser = OptionParser(usage="usage %prog options")
   parser.add_option("-i","--item",
                     dest="item",
                     default="",
                     action="store",
                     )
   parser.add_option("-p","--host",
                     dest="host",
                     default="",
                     action="store",
                     )
   parser.add_option("-f","--file",
                     dest="file",
                     default="",
                     action="store",
                     )
   parser.add_option("-s","--sfile",
                     dest="sfile",
                     default="",
                     action="store",
                     )
   parser.add_option("-d","--dfile",
                     dest="dfile",
                     default="",
                     action="store",
                     )
   parser.add_option("-c","--cmd",
                     dest="cmd",
                     default="",
                     action="store",
                     )
   return parser.parse_args()
class Get_date(object):
   def ssh_cmd(self,number,user,ip,port,cmd):
       for i in xrange(number):
         ssh = paramiko.SSHClient()
         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
         ssh.connect(ip,port,user,"")
         stdin1, stdout1, stderr1 = ssh.exec_command("hostname")
         stdin2, stdout2, stderr2 = ssh.exec_command(cmd)
         out1 = stdout1.read()
         #in2 = stdin2.read()
         out2 = stdout2.read()
         err2 = stderr2.read()
         print "\033[32;1m%s-%s:\n\033[0m%s %s" %(out1.strip(),ip,out2.strip(),err2.strip())
         print "\033[33;1m-\033[0m"*120
         ssh.close()
   def cmd(self,user,ip,port,cmd):
       for i in xrange(len(ip)):
         a=threading.Thread(target=self.ssh_cmd,args=(1,user,ip,port,cmd))
         a.start()
   def ssh_file(self,number,user,ip,port,path_ssh_key,sfile,dfile):
       key = paramiko.DSSKey.from_private_key_file(path_ssh_key)
       for i in xrange(number):
         ssh = paramiko.Transport((ip,port))
         ssh_f=ssh.connect(username = user, pkey = key)
         sftp = paramiko.SFTPClient.from_transport(ssh)
         path=os.path.split(dfile)
         try:
               ssh_result=sftp.put(sfile,dfile)
         except Exception as e:
               for i in xrange(1,len(path.split('/'))+1):
                   try:
                     a=path.split('/')
                     new_path='/'.join(a)
                     sftp.mkdir(new_path)
                   except Exception as e:
                     continue
               ssh_result=sftp.put(sfile,dfile)
         print "\033[31;1m%s\033[0m"%(ip)
         print "\033[32;1m%s:---------->%s\n\033[0m%s"%(sfile,dfile,ssh_result)
         print "\033[33;1m-\033[0m"*120
         ssh.close()
   def file(self,user,ip,port,path_ssh_key,sfile,dfile):
       for i in xrange(len(ip)):
         a=threading.Thread(target=self.ssh_file,args=(1,user,ip,port,path_ssh_key,sfile,dfile))
         a.start()
def main():
   user=host_msg["user"]
   port=host_msg["port"]
   path_ssh_key=host_msg["ssh_key"]
   get_host_date=Get_date()
   opt,args=opts()
   ssh_item=opt.item
   ssh_file=opt.file
   ssh_sfile=opt.sfile
   ssh_dfile=opt.dfile
   ssh_cmd=opt.cmd
   ssh_ip=opt.host
   if ssh_cmd:
       if ssh_ip:
         if args:
               args.append(ssh_ip)
               get_host_date.cmd(user,args,port,ssh_cmd)
         else:
               get_host_date.cmd(user,,port,ssh_cmd)
       if ssh_item and ssh_item in ip_msg.keys():
         get_host_date.cmd(user,ip_msg,port,ssh_cmd)
   #print ssh_item,ssh_cmd,args,ssh_file
   if ssh_file:
       if ssh_ip:
         if args:
               args.append(ssh_ip)
               get_host_date.file(user,args,port,path_ssh_key,ssh_file,ssh_file)
         else:
               get_host_date.file(user,,port,path_ssh_key,ssh_file,ssh_file)
       if ssh_item and ssh_item in ip_msg.keys():
         get_host_date.file(user,ip_msg,port,path_ssh_key,ssh_file,ssh_file)
   if ssh_sfile and ssh_dfile:
       if ssh_ip:
         if args:
               args.append(ssh_ip)
               get_host_date.file(user,args,port,path_ssh_key,ssh_sfile,ssh_dfile)
         else:
               get_host_date.file(user,,port,path_ssh_key,ssh_sfile,ssh_dfile)
       if ssh_item and ssh_item in ip_msg.keys():
         get_host_date.file(user,ip_msg,port,path_ssh_key,ssh_sfile,ssh_dfile)

if __name__=="__main__":
   main()

北京-光辉岁月 发表于 2014-5-13 01:52:26

好吧。。。。。。。。。 这个东西,最近我又加了功能
页: [1]
查看完整版本: 原创python多线程批量管理工具batch(不断完善)