本文共 1614 字,大约阅读时间需要 5 分钟。
Tools.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #!/usr/bin/python #coding:utf-8 import threading import subprocess import os import sys sshport = 13131 log_path = 'update_log' output = {} def execute(s, ip, cmd, log_path_today): with s: cmd = '''ssh -p%s root@%s -n "%s" ''' % (sshport, ip, cmd) ret = subprocess.Popen(cmd, shell = True , stdout = subprocess.PIPE, stderr = subprocess.STDOUT) output[ip] = ret.stdout.readlines() if __name__ = = "__main__" : if len (sys.argv) ! = 3 : print "Usage: %s config.ini cmd" % sys.argv[ 0 ] sys.exit( 1 ) if not os.path.isfile(sys.argv[ 1 ]): print "Usage: %s is not file!" % sys.argv[ 1 ] sys.exit( 1 ) cmd = sys.argv[ 2 ] f = open (sys.argv[ 1 ], 'r' ) list = f.readlines() f.close() today = datetime.date.today() log_path_today = '%s/%s' % (log_path,today) if not os.path.isdir(log_path_today): os.makedirs(log_path_today) threading_num = 100 if threading_num > len ( list ): threading_num = len ( list ) s = threading.Semaphore(threading_num) for line in list : ip = line.strip() t = threading.Thread(target = execute,args = (s, ip,cmd,log_path_today)) t.setDaemon( True ) t.start() main_thread = threading.currentThread() for t in threading. enumerate (): if t is main_thread: continue t.join() for ip,result in output.items(): print "%s: " % ip for line in result: print " %s" % line.strip() print "Done!" |
脚本读取两个参数,第一个为存放IP的文本,第二个为shell命令
效果如下:
够简单的哈。。。直接调用ssh。。
本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1321655如需转载请自行联系原作者
lihuipeng