首页 > 代码库 > pexpect练习实例--批量执行远程服务器上的指定脚本
pexpect练习实例--批量执行远程服务器上的指定脚本
经过几天的学习,pexpect模块对于linux下运维脚本编写属实有用,下面写个脚本检验下学习效果。
#!/usr/bin/env python #coding=utf-8 #远程执行服务器上的脚本 import sys, time, os, multiprocessing try: import pexpect except ImportError: print """ You must install pexpect module """ sys.exit(1) addr_map = { ‘s1‘:(‘root@192.168.1.1‘, ‘aaa‘), ‘s2‘:(‘root@192.168.1.2‘, ‘bbb‘), } cmd_map = { ‘four‘:"/usr/local/src/four.sh", ‘five‘:"/usr/local/src/five.sh", } # 必须带1个参数 if len(sys.argv) != 2: #系统错误输出 print ‘wrong!!!‘ sys.stderr.write("Usage: python %s cmd \n" % sys.argv[0]) raise SystemExit(1) try: cmd_key = sys.argv[1] print ‘cmd_key: %s‘ % cmd_key cmd = cmd_map[cmd_key] print ‘cmd: %s‘ % cmd except: sys.stderr.write("Usage: python %s cmd \n" % sys.argv[0]) print "cmd: four or five" raise SystemExit(1) ‘‘‘ # #################################### # 定义函数,并将其作为单个进程 def runn(s): child = pexpect.spawn(‘ssh %s %s‘ % (addr_map[s][0],cmd_map[cmd_key])) index = child.expect(["(?i)password", pexpect.EOF, pexpect.TIMEOUT]) child.sendline(addr_map[s][1]) child.expect(pexpect.EOF) print child.before child.sendline("quit") for key in addr_map: p = multiprocessing.Process(target=runn, args=(key,)) p.start() ‘‘‘ # ####################################### # 将进程定义为类 class ttt(multiprocessing.Process): def __init__(self,id): multiprocessing.Process.__init__(self) self.id = id print self.id def run(self): child = pexpect.spawn(‘ssh %s %s‘ % (addr_map[self.id][0],cmd_map[cmd_key])) index = child.expect(["(?i)passwd",pexpect.EOF,pexpect.TIMEOUT]) child.sendline(addr_map[self.id][1]) child.expect(pexpect.EOF) print child.before child.sendline("quit") for key in addr_map: p = ttt(key) p.start()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。