自动化运维第三方库(一)

关于Python自动化运维的模块总结(一)

以下内容参考刘天斯所著《Python自动化运维技术与最佳实践》

1.系统基础信息模块

psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who等。例如获取Linux操作系统的CPU利用率:

1
2
import psutil
psutil.cpu_times() #获取CPU完整信息,需要显示所有逻辑CPU信息

psutil也可以获得当前系统的进程信息,可以得知应用程序的运行状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等。
参考提示:psutil示例参考
模块说明官网

2.IP地址处理模块

IPy可以计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。例如通过version方法就可以区分出IPv4与IPv6:

1
2
from IPy import IP
IP('10.0.0.0/8').version()

参考提示: 官网文档与示例参考

3.DNS处理模块

dnspython是Python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。
dnspython模块提供了大量DNS处理方法,最常用的方法是域名查询。dnspython提供了一个DNS解析器类————resolver,使用它的query方法来实现域名的查询功能,query方法的定义如下:

query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True,
source_port=0)

其中,qname参数为查询的域名,rdtype参数用来指定RR资源的类型。
参考提示: 官网文档

4.文件内容差异对比

difflib是Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,可以用来对比代码、配置文件的差别。
采用HtmlDiff()类的make_file()方法就可以生成美观的HTML文档。
参考提示: 官方文档

5.文件与目录差异对比方法

Python标准库自带的模块filecmp,可以实现文件、目录、遍历子目录的差异对比功能,比如报告中输出目标目录比原始多出的文件或子目录,即使文件同名也会判断是否为同一个文件(内容级对比)等。
常用方法举例:

  • 单文件对比,采用filecmp.cmp(f1,f2,[,shallow])方法,比较文件名f1和f2的文件,相同返回True,shallow无认为True,意思是只根据os.stat()方法返回的文件基本信息进行对比,比如最后访问时间、修改时间、状态改变时间等,会忽略文件内容的对比。
  • 多文件对比,采用filecmp.cmpfiles(dir1,dir2,common[,shallow])方法,对比dir1和dir2目录给定的文件清单。该方法返回文件名的三个列表,分别为匹配、不匹配、错误。错误列表包括了目录不存在文件、不具备读权限或其他原因导致的不能比较的文件清单。
  • 目录对比,通过dircmp(a,b[,ignore[,hide]])类创建一个目录比较对象,其中a和b是参加比较的目录名。ignore代表文件名忽略的列表,并默认为[‘RCS’,’CVS’,’tags’],hide代表隐藏的列表,默认为[os.curdir,os.pardir]。dircmp还提供了输出报告的方法,提供了比较的属性,敬请参考官方文档。
    参考提示: 官方文档

6.发送电子邮件模块

Python的smtplib模块可以实现邮件的发送功能,模拟一个smtp客户端,通过与smtp服务器交互来实现邮件发送的功能。简单示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import smtplib
import string

HOST="smtp.exmail.qq.com" #定义stmp主机,这里是QQ邮箱的主机
SUBJECT="python email assistant" #邮件主题
TO="testmail@psyannabel.cn" #邮件发送人
FROM="annabel@psyannabel.cn" #邮件发件人
text="Python rules them all" #邮件内容
BODY="\r\n".join((
"From: %s" % FROM,
"To: %s" % TO,
"Subject: %s" % SUBJECT,
"",
text
))
server=smtplib.SMTP() #创建STMP()对象
server.connect(HOST,"25") #通过connect方法连接smtp主机
server.starttls() #启动安全传输模式
server.login("annabel@psyannabel.cn","password") #邮箱账号登陆校验
server.sendmail(FROM,[TO],BODY) #邮件发送
server.quit() #断开smtp连接

MIME还可以扩展邮件格式,使邮件包含HTML、图像、声音以及附件格式等。
参考提示: smtplib模块常用方法
email.mine常用类定义

评论