博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Python自动化运维之路》 业务服务监控(二)
阅读量:4575 次
发布时间:2019-06-08

本文共 6375 字,大约阅读时间需要 21 分钟。

文件内容差异对比方法

使用diffie模块实现文件内容差异对比。dmib作为 Python的标准库模块,

无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与 Linux
下的dif命令相似。我们可以使用 diffie对比代码、配置文件的差别,在版本控制方面是非
常有用。 Python3.x或更高版本默认自带 diffie模块,无需额外安装。

 

目录:

  • 实例:两个字符串的差异对比
  • 生成美观的对比HTML格式文档
  • 对比Nginx配置文件的差异

 

两个字符串的差异对比

本例通过使用difflib模块实现两个字符串的差异对比,然后以版本控制风格进行输出。

>>> import difflib>>> >>> text1="difflib document v7.4"                #定义字符串1>>> text2="difflib document v7.5"                #定义字符串2>>> >>> text1_lines=text1.splitlines()               #进行分割,以便于进行对比>>> text2_lines=text2.splitlines()>>> >>> diff=difflib.Differ()                        #创建Differ()对象>>> >>> differ=diff.compare(text1_lines,text2_lines) #采用compare方法对比字符串>>> >>> print('\n'.join(list(differ)))- difflib document v7.4?                     ^+ difflib document v7.5?                     ^>>> //注释:对符号含义说明 // -  #包含在第一个序列行中,但不包含在第二个序列行中 // +  #包含在第二个序列行中,但不包含在第一个序列行中 // 空 #两个序列行一致 // ? #两个序列行存在增量差异 // ^  #两个序列行存在差异字符

 

生成美观的对比HTML格式文档

 采用HtmlDiff()类的make_file()方法就可以生成美观的HTML文档啦。

>>> import difflib>>> >>> text1_lines=text1.splitlines()>>> text2_lines=text2.splitlines()>>> >>> >>> text1_lines=text1.splitlines()>>> text2_lines=text2.splitlines()>>> >>> diff=difflib.HtmlDiff()>>> print(diff.make_file(text1_lines,text2_lines))

#将生成的代码保存成*.html用浏览器打开就可以看到效果了。美美哒

 

对比Nginx配置文件的差异

import difflibimport systry:    textfile1 = sys.argv[1]                            #第一个文件参数    textfile2 = sys.argv[2]                            #第二个文件参数except Exception (e):    print ("Error:" +str(e))    print ("Usage: python sample3.py filename1 filename2")    sys.exit()def readfile(filename):                                #文件读取分隔函数    try:        filehandle = open(filename,'rb')        text = filehandle.read().splitlines()          #读取后进行分分隔        filehandle.close()        return text    except IOError as error:        print ('Read file Error:' +str(error))        sys.exit()text1_lines = readfile(textfile1)                      #调用readline函数,获取分隔后的字符串text2_lines = readfile(textfile2)d = difflib.HtmlDiff()                                 #创建htmldiff()对象print (d.make_file(str(text1_lines),str(text2_lines))) #通过make_file方法输出HTML格式的比对结果 //注释:调用格式 python *.py nginx.conf nginx1.conf > index.html

 

文件与目录差异对比方法

当我们进行代码审计或校验备份结果时,往往需要检査原始与目标目录的文件一致性,

Python的标准库已经自带了满足此需求的模块 filecmp。 filecmp可以实现文件、目录、遍历
子目录的差异对比功能。比如报告中输出目标目录比原始多出的文件或子目录,即使文件同
名也会判断是否为同一个文件(内容级对比)等, Python3.x或更高版本默认自带 filecmp模
块,无需额外安装,下面进行详细介绍。

 

目录:

  • 模块常用方法说明
  • 实例:校验源备份目录的差异

 

模块常用方法说明

filecmp提供了三个操作方法,分别是cmd(单文件对比),cmpfiles(多文件对比),dircmp(目录对比)

 

#比较单文件的差异

>>> import filecmp>>> >>> filecmp.cmp("/root/passwd","/root/passwd1")       #false表示两文件存在差异False>>> >>> filecmp.cmp("/root/passwd","/root/passwd")        #true表示两文件不存在差异True>>>

 

#dir1与dir2目录中指定文件清单对比(多文件对比)

 首先查看两个目录下文件的md5信息

[root@localhost ~]# md5sum /root/dir1/*2dd2ba1e74c9550bc296f1897d0d28ea  /root/dir1/f117fe7001eacbe989f30800e6d388468e  /root/dir1/f234ba72536687abe2af89b3c08f057508  /root/dir1/f3fa2529c29d2185a6794f9510deeb648d  /root/dir1/f4[root@localhost ~]# [root@localhost ~]# md5sum /root/dir2/*d82149e67b8a46e475f399c9f972b3e1  /root/dir2/f14072f32423778ba29fbcde9e10162964  /root/dir2/f2134839dbce78e8d11273c5b105eb7172  /root/dir2/f3fa2529c29d2185a6794f9510deeb648d  /root/dir2/f4[root@localhost ~]#

使用cmpfiles对比结果如下

>>> import filecmp>>> >>> filecmp.cmpfiles("/root/dir1","/root/dir2",["f1","f2","f3","f4"])(['f4'], ['f1', 'f2', 'f3'], [])

 

#通过调用dircmp()方法实现目录差异对比功能,同时输出目录对比对象所有属性信息

import filecmpdir1="/root/dir1"                               #定义左目录dir2="/root/dir2"                               #定义右目录diff=filecmp.dircmp(dir1,dir2,["test.py"])      #目录比较,忽略test.py文件diff.report()                                   #比较当前指定目录中的内容diff.report_partial_closure()                   #比较当前指定目录及第一级子目录中的内容diff.report_full_closure()                      #递归比较所有目录#------------------------------------------------------------------------ print(str(diff.left_list))                      #左目录中的文件及目录列表print(str(diff.right_list))                     #右目录中的文件及目录列表print(str(diff.common))                         #两边目录共同存在的文件或目录print(str(diff.left_only))                      #只在左目录中的文件或目录print(str(diff.right_only))                     #只在右目录中的文件或目录print(str(diff.common_dirs))                    #两边目录都存在的子目录print(str(diff.common_files))                   #两边目录都存在的子文件print(str(diff.common_funny))                   #两边目录都存在的子目录print(str(diff.same_files))                     #匹配相同的文件print(str(diff.diff_files))                     #不匹配的文件print(str(diff.funny_files))                    #两边目录中都存在,但无法比较的文件

 

实例:校验源备份目录的差异

 有时候我们无法确认备份目录与源目录文件是否保持一致,包括源目录中的新文件或

目录、更新文件或目录有无成功同步,定期进行校验,没有成功则希望有针对性地进行补备

份。本示例使用了 filecmp模块的 left only、 diff files方法递归获取源目录的更新项,再通过
shutil. copyfile、 os. makedirs方法对更新项进行复制,最终保持一致状态。详细源码如下:

 

 

大boos,要最后打,稍安污糟,撸起袖子加油干!!!!

 

 

 

发送电子邮件模块SMTPlib

电子邮件是最流行的互联网应用之一。在系统管理领域,我们常常使用邮件来发送告警

信息、业务质量报表等,方便运维人员第一时间了解业务的服务状态。本节通过 Python的
smtplib模块来实现邮件的发送功能,模拟一个smtp客户端,通过与smtp服务器交互来实
现邮件发送的功能,这可以理解成 Foxmail的发邮件功能,在第一次使用之前我们需要配置
smtp主机地址、邮箱账号及密码等信息, Python3.x或更高版本默认自带 smtplib模块,无需
额外安装。下面详细进行介绍。

 

目录:

  • smtplib模块的常用类与方法
  • 定制个性化的邮件格式方法
  • 定制常用邮件格式示例详解

SMTPlib模块的常用类与方法

 不知为何就是无法发送邮件

import smtplibimport stringHOST="smtp.gmail.com"                           #定义SMTP主机SUBJECT="Test Email From Python"                #定义邮件主题TO="1181506874@qq.com"                          #定义邮件收件人FROM="mymail@gmail.com"                         #定义邮件发件人text="Hello Python!"                            #邮件内容BODY="\r\n".join((                              #组转sendmail方法的邮件主题内容,字段以"\r\n"分隔                "From: %s" % FROM,                "To: %s" % TO,                "Subject: %s" % SUBJECT,                "",                text                ))server=smtplib.SMTP()                           #创建一个SMTP()对象server.connect(HOST,"25")                       #通过connect方法链接SMTP主机server.starttls()                               #启用安全模式server.login("mymail@gmail.com","123123")       #邮件账号密码登陆验证server.sendmail(FROM,[TO],BODY)                 #邮件发送server.quit()                                   #断开SMTP链接

 

定制个性化的邮件格式方法

 

 

定制常用邮件格式示例详解

 

 

探测WEB服务质量的方法

pycurl(http://pycurl.sourceforge.net)是一个用c语言写的libcurlPython实现,功能非

强大,支持的操作协议有FTP、HTTP、 Https、 TELNET等,可以理解成 Linux下curl命
令功能的 Python封装,简单易用。本节通过调用 pycurl提供的方法,实现探测Web服务质
量的情况,比如响应的HTTP状态码、请求延时、HTTP头信息、下载速度等,利用这些信
息可以定位服务响应慢的具体环节,下面详细进行说明。

 

目录:

  • 模块常用方法说明
  • 实例:实现探测WEB服务的质量

 

模块常用方法说明

 

 

 

 

 

 

 

 

 

实例:实现探测Web服务的质量

 

转载于:https://www.cnblogs.com/LyShark/p/9148902.html

你可能感兴趣的文章
为什么要配置sdk-tools/platform-toools?
查看>>
自己动手开发更好用的markdown编辑器-07(扩展语法)
查看>>
maven dependency:tree中反斜杠的含义
查看>>
队列的循环队列
查看>>
程序中的日期格式
查看>>
大众点评CAT错误总结以及解决思路
查看>>
从0开始学爬虫3之xpath的介绍和使用
查看>>
vim下正则表达式的非贪婪匹配
查看>>
一个python的计算熵(entropy)的函数
查看>>
spring源码学习——spring整体架构和设计理念
查看>>
模拟window系统的“回收站”
查看>>
报文格式【定长报文】
查看>>
RDLC报表钻取空白页问题
查看>>
多路电梯调度的思想
查看>>
jQuery-对Select的操作
查看>>
过滤器、监听器、拦截器的区别
查看>>
为什么要进行需求分析?通常对软件系统有哪些需求?
查看>>
一些模板
查看>>
jquery和dom元素相互转换
查看>>
放大的X--HDOJ-201307292012
查看>>