#!/usr/bin/env python
#-*- coding:utf-8 -*-
#多线程批量远程执行一条命令
# made in china
import threading
import sys,os
import subprocess
#cmd = sys.argv[2]
ip_list=[]
ip_fail=[]
def subprocess_caller(cmd):
try:
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
output, error = p.communicate()
except OSError, e:
print 'SUBPROCEEE_CALLER function: execute command failed, message is %s' % e
return dict(output = [], error = [], code = 1)
else:
return dict(output = output, error = error, code = 0)
#cmd
def run_cmd(num,ip):
cmd = sys.argv[2]
tmp_cmd = "ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=no root@%s 2>/dev/null \"%s\" "%(ip,cmd.strip())
res=subprocess_caller(tmp_cmd)
#print "===================="
#print "The %s is %s success"%(ip,num)
#print "===================="
if res['output'] != '':
print "\033[1;35m The %s is succeed \033[0m \n %s \n"%(ip,res['output'])
else:
print "\033[1;31m The %s is failed \040"%(ip)
ip_fail.append(ip)
#ip
def get_ip():
ip_file = sys.argv[1]
input = open(ip_file,'r')
while True:
tmp_ip = input.readline()
if tmp_ip != '':
#print type(tmp_ip)
ip_list.append(tmp_ip.strip())
else:
break
input.close()
#print ip_list
#多线程
def main():
get_ip()
threads = []
nloops = range(len(ip_list))
for i in nloops:
t = threading.Thread(target=run_cmd,args=(i, ip_list[i]))
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
if len(ip_fail) != 0:
print ip_fail
if __name__ == '__main__':
main()