- 论坛徽章:
- 0
|
本帖最后由 dc222222222 于 2014-11-25 11:18 编辑
回复 41# yestreenstars
其实刚开始的时候基本上都是用system或者popen这样的函数去调用shell命令,说白了就是在shell的外面包了一层python的壳而已,后来发现python有自己的方法可以实现shell的大部分功能,比如抓性能数据的psutil, 处理网络请求的socket模块, shell中的awk也可用用python中更灵活的语法以及函数替代实现:
如下是一个检测服务器端口是否存活的zabbix监控脚本。- #!/bin/env python
- #Author: sixther
- #comment: check port status on linux server.usage: ./check_port_status.py 80:httpd 3306:mysql 22:sshd
- import socket,sys,os
- del sys.argv[0]
- down_process=[]
- ip_list=[]
- #这块应该是纯包装,呵呵。
- get_iplist_cmd="/sbin/ifconfig | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'"
- for i in os.popen(get_iplist_cmd):
- ip_list.append(i.strip())
- #采用socket的方式代替之前过滤netstat -lntp的输出。
- def check_port(addr,port):
- sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- result=sock.connect_ex((addr,port))
- sock.close()
- if result == 0:
- return 0
- else:
- return 1
- if __name__ == '__main__':
- for i in sys.argv:
- for j in ip_list:
- return_num=check_port(j,int(i.split(":")[0]))
- if return_num == 0:
- code=''
- break
- else:
- code='down'
- if code == 'down':
- down_process.append(i.split(":")[1])
- code=''
- if len(down_process):
- print str(down_process) + " down!"
- else:
- print 0
复制代码 |
|