博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 简单的多线程执行命令
阅读量:6720 次
发布时间:2019-06-25

本文共 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
]
                                      
    
= 
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
)
    
= 
threading.Semaphore(threading_num)
                                      
    
for 
line 
in 
list
:
        
ip 
= 
line.strip()
        
= 
threading.Thread(target
=
execute,args
=
(s, ip,cmd,log_path_today))
        
t.setDaemon(
True
)
        
t.start()
                                          
    
main_thread 
= 
threading.currentThread()
    
for 
in 
threading.
enumerate
():
        
if 
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

你可能感兴趣的文章
红米4A手机刷开发版rom并且获取root权限
查看>>
if语句三种形式
查看>>
C# PDF 全攻略
查看>>
用户场景分析
查看>>
Linux下QT和qtCreator安装配置
查看>>
javascript+dom 编程艺术<2>
查看>>
你人生最重的枷锁是什么?
查看>>
MySQL学习(八)
查看>>
【转载】支持向量机(三)核函数
查看>>
K8s集群部署(一)------ETCD集群部署
查看>>
python 基本数据类型之整数和布尔值
查看>>
@font-face在vue中的使用
查看>>
MathType可以编辑带圈乘号吗
查看>>
Mac生成ssh key
查看>>
canvas绘图详解-05-线条的属性
查看>>
python socket通信案例
查看>>
第十章
查看>>
C++typedefine用法小结
查看>>
CSS3边框特效
查看>>
Cocos2D坐标系
查看>>