博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
批量远程执行linux服务器程序--基于pxpect(多进程、记日志版)
阅读量:6852 次
发布时间:2019-06-26

本文共 2620 字,大约阅读时间需要 8 分钟。

#!/usr/bin/python

'''

Created on 2015-06-09
@author: Administrator
'''

import pexpectimport os,sysfrom optparse import OptionParserimport logging,multiprocessingimport logging.handlers#menueusage='%prog [-h][-s Servers][-c CMDS][--version]'parser=OptionParser(usage=usage,version='Hu 2.0_20150609')parser.add_option('-s','--Server',dest='server',default='ip.txt',help='The Server Info')parser.add_option('-c','--CMDS',dest='cmd',default='pwd',help='You wann to execute commands')(options,args)=parser.parse_args()print options.server,options.cmdlogger=logging.getLogger()logger.setLevel(logging.DEBUG)ch=logging.StreamHandler()cc=logging.handlers.RotatingFileHandler('log.txt', maxBytes = 1024*1024, backupCount = 5)formatter=logging.Formatter("%(asctime)s-%(name)s-%(levelname)s %(message)s")ch.setFormatter(formatter)cc.setFormatter(formatter)logger.addHandler(ch)logger.addHandler(cc)#ssh functionsdef connect(ip,username,password,port,prompt=']#'):    try:        ssh_newkey='Are you sure you want to continue connecting'        child=pexpect.spawn('ssh '+username + '@'+ip+' -p '+port,maxread=5000)        child.logfile=fout        i=child.expect([prompt,'assword:*',ssh_newkey,'refused',pexpect.TIMEOUT,'key.*? failed'])        print i    #if not False:       # print child.before,child.after        if i==0:                pass        elif i==1:                print password                child.sendline(password)        elif i==2:                child.sendline('yes')        elif i==4:                raise Exception('Error TIMEOUT!')        elif i==3:                print 'Connect refused'        elif i==5:                print child.before,child.after                os.remove(os.path.expanduser('~')+'/.ssh/known_hosts')                child.expect('#')        print child.after,child.before                child.sendline(options.cmd)        child.expect('#')        print child.before,child.after          print 'The command %s result is:' % options.cmd        print  child.before    except Exception,e:        logger.error("Connect Error")            #check -s isn't exitsif os.path.exists(options.server):    filename=options.server    passelse:    print 'Please check %s and ip.txt is exits' % options.server    exit(-1)#executefout=file('mylog.txt','w')for line in open(filename):    ip,user,passwd,port=line.strip().split()    print '*'*50    print 'The follow ip is %s:' % ip    p=multiprocessing.Pool(processes=4)    result=p.apply_async(connect,[ip,user,passwd,port])    print result.get()    #connect(ip,user,passwd,port)

E-mail:362299908@qq.com 

转载于:https://www.cnblogs.com/landhu/p/4961516.html

你可能感兴趣的文章
第一部分 思科九年 一(13)
查看>>
PostgreSQL从终端插入数据中含有中文会出现乱码
查看>>
无线网卡和有线网卡同时使用
查看>>
常用 Git 命令清单
查看>>
WEB-INF目录与META-INF目录详解
查看>>
软件测试
查看>>
威士忌
查看>>
根据status信息对MySQL服务器进行优化
查看>>
redis sharding方案
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
我的友情链接
查看>>
带快照情况下 vmkfstools -X 扩充虚拟机硬盘空间
查看>>
强大的离线字典《Colordict》+多种词库下载地址
查看>>
7.2 nagios的使用及插件调用
查看>>
root密码别人修改了,如何改回
查看>>
mac下编译安装swoole软件
查看>>
配置参数和公共函数
查看>>
Django项目文件模板修改
查看>>
IDC服务品质协议范本留存
查看>>
360浏览器将密码框显示成明文密码问题解决
查看>>