《集美大学网络管理规定实验五》由会员分享,可在线阅读,更多相关《集美大学网络管理规定实验五(16页珍藏版)》请在金锄头文库上搜索。
1、实验五 业务服务监控详解(一)一、实验目的本实验的主要目的是通过运用Python第三方系统基础模块,快速、有效地开发企业级服务监控平台,设计文件与目录差异对比方法、HTTP质量监控、邮件告警等内容。 二、实验内容1、文件内容差异对比方法。2、文件与目录差异对比方法。三、实验工具1、linux2、python及相关的第三方基础模块四、实验步骤模块介绍我们可以通过Python的标准库模块(Python2.3以上就已经自带)difflib模块来实现文件内容的文本差异对比。并且支持输出可读性比较强的HTML文档,与Linux下的diff命令相似。可以使用difflib对比代码,配置文件的差别,在版本控
2、制方面非常有用。5.1 实现两个字符串的差异对比在下列示例程序中,定义了两个字符串,对比差异之后以版本控制风格进行输出。你的运行结果截屏放于此处。在上面的结果中,发现字符串下面有符号标记。其符号含义如下:符号含义 - 包含在第一个系列行中,但不包含第二个。 + 包含在第二个系列行中,但不包含第一个。 两个序列行一致 标志两个序列行存在增量差异 标志着两个序列行存在的差异字符然后现在再来分析一下上面的结果。分析结果(此处写出你的分析结果):Text1 与text2文档存在增量差异以及字符差异Text1里包含而text2没有5.2将字符串对比结果生成美观的HTML格式文档difflib中的Html
3、Diff()类支持将比较结果输出为HTML格式,其HtmlDiff()类中的make_file()方法可以生成美观的html文档。我们依旧采用上面的代码,做一些简单的修改:将新文件命名为Difflib.py,运行python Difflib.py Text.html,再使用浏览器打开Text.html文件。运行结果截屏。此处放置你的程序运行结果截屏。python Difflib.py Text.html使用浏览器打开Text.html文件,会发现一个新的问题出来了,我们使用网页打开我们输出的Text.html文件,显示效果如下,换了多个浏览器也是一致乱码。发现只要是显示中文,包括中文和中文输入
4、法的字符都会出现乱码。查看Text.html文本 将utf-8编码改为同样支持中文编码的gbk后,重新使用浏览器打开Text.html文件发现中文显示正常。此HTML文档包括了行号、差异标志、图例等信息,可读性增强了很多。模块介绍Python2.3以上的版本默认自带了filecmp模块,无需额外安装。我们可以用这个模块来检查原式与目标文件的一致性,filecmp可以实现文件、目录、遍历子目录的差异对比功能。模块使用filecmp提供了三个操作方法。 cmp:单文件对比 cmpfiles:多文件对比 dircmp:目录对比5.3单文件对比使用的是filecmp.cmp(f1,f2,shallow
5、)。其中f1、f2为文件,当两个文件相同时返回True,不同返回False,(shallow默认为True,其意思是只根据os.stat()方法返回的文件基本信息进行对比最后访问时间、修改时间、状态改变时间等,而不考虑文件内容)。当shallow为False时,则os.stat()与文件内容同时进行校验。(1)在/home路径下创建test文件夹,在test文件夹下创建filecmp文件夹,在filecmp/路径下在代码的当前路径/home/test/filecmp。在filecmp文件夹下创建两个名为File1.txt、File3.txt的文件,在File1中敲入你的姓名,性别。在File3
6、中敲入你的学号。File1.txt和File3.txt创建结束。接着创建File2.txt,它是File1.txt的副本文件,即直接由复制文件File1.txt并改名File2.txt得到。所以按理来说File1.txt、File2.txt两个文件完全相同、而与File3.txt文件不同。下面使用代码进行验证:5.4多文件对比比较两个文件夹内指定文件是否相等。参数dir1,dir2指定要比较的文件夹,参数common指定要比较的文件名列表。函数返回包含3个list元素的元组,分别表示匹配、不匹配以及错误的文件列表。错误的文件指的是不存在的文件,或文件被锁定不可读,或没权限读文件,或者由于其他原
7、因访问不了该文件。l 在刚才创建的filecmp/路径下,创建两个文件夹dir1和dir2。形成/home/test/filecmp/dir1和/home/test/filecmp/dir2。l 具体过程:首先创建dir1,dir1下创建以上五个文件。文件内容可以随意的填写。再创建第二个文件夹dir2。将文件夹dir1中的File1.txt和File2.txt(File2.txt,它是File1.txt的副本文件,即直接由复制文件File1.txt并改名File2.txt得到)拷贝到dir2下。再创建新的命名为File3.txt和File5.txt两个文件。File3.txt和File5.tx
8、t文件内容可随意添加。dir2形成filecmp下目录tree图:进入dir1目录下,输入命令:md5sum *得到下列文件是dir1文件夹下所有文件的MD5值(你所得的值与下列值格式类似但具体值不同,将你的所得截屏)FBAAF8CC3C1DF70B183CB8E8FBDFC57C *File1.txtFBAAF8CC3C1DF70B183CB8E8FBDFC57C *File2.txt16EC37C499F64FC60E95650B500E30A4 *File3.txt202CB962AC59075B964B07152D234B70 *File4.txt进入dir1目录下,输入命令:md5s
9、um *下列文件是dir2文件夹下所有文件的MD5值(你所得的值与下列值格式类似但具体值不同,将你的所得截屏)FBAAF8CC3C1DF70B183CB8E8FBDFC57C *File1.txtFBAAF8CC3C1DF70B183CB8E8FBDFC57C *File2.txtD41D8CD98F00B204E9800998ECF8427E *File3.txtCB30FC9CEC9A2D04EF49B22E2066C264 *File5.txt# 根据MD5值可以知道,两个文件夹下的File1.txt、File2.txt相匹配,# 而File3.txt不匹配,# 另外对于File4.tx
10、t和File5.txt两个文件只在各自的目录下存在。使用示例代码验证:5.5目录对比目录对比,通过filecmp(a,b,ignore,hide)类创建一个目录比较对象用于比较文件夹,通过该类比较两个文件夹,可以获取一些详细的比较结果(如只在A文件夹存在的文件列表),并支持子文件夹的递归比较。dircmp提供了三个方法用于报告比较的结果: report():只比较指定文件夹中的内容(文件与文件夹) report_partial_closure():比较文件夹及第一级子文件夹的内容 report_full_closure():递归比较所有的文件夹的内容另外为了输出更加详细的信息,dircmp类还
11、提供了以下属性: left_list:左边文件夹中的文件与文件夹列表; right_list:右边文件夹中的文件与文件夹列表; common:两边文件夹中都存在的文件或文件夹; left_only:只在左边文件夹中存在的文件或文件夹; right_only:只在右边文件夹中存在的文件或文件夹; common_dirs:两边文件夹都存在的子文件夹; common_files:两边文件夹都存在的子文件; common_funny:两边文件夹都存在的子文件夹; same_files:匹配的文件; diff_files:不匹配的文件; funny_files:两边文件夹中都存在,但无法比较的文件; s
12、ubdirs:将common_dirs目录映射到新的dircmp对象,格式为字典的类型。示例代码,比较dir1和dir2文件夹目录的差异# -*- coding: utf-8 -*-import filecmpa = /home/test/filecmp/dir1 # 定义左目录b = /home/test/filecmp/dir2 # 定义右目录dirobj = filecmp.dircmp(a, b, EXT.txt) # 目录比较,忽略EXT.txt文件# 输出对比结果数据报表,详细说明请参考filecmp类方法及属性信息dirobj.report()dirobj.report_part
13、ial_closure()dirobj.report_full_closure()print(left_list: + str(dirobj.left_list)print(right_list: + str(dirobj.right_list)print(common: + str(mon)print(left_only: + str(dirobj.left_only)print(right_only: + str(dirobj.right_only)print(common_dirs: + str(mon_dirs)print(common_files: + str(mon_files)p
14、rint(common_funny: + str(mon_funny)print(same_file: + str(dirobj.same_files)print(diff_files: + str(dirobj.diff_files)print(funny_files: + str(dirobj.funny_files)运行结果下:#python filecmpTest.pydiff /home/test/filecmp/dir1 /home/test/filecmp/dir2Only in /home/test/filecmp/dir1 : File4.txtOnly in /home/t
15、est/filecmp/dir2 : File5.txtIdentical files : File1.txt, File2.txtDiffering files : File3.txtdiff /home/test/filecmp/dir1 /home/test/filecmp/dir2Only in /home/test/filecmp/dir1 : File4.txtOnly in /home/test/filecmp/dir2 : File5.txtIdentical files : File1.txt, File2.txtDiffering files : File3.txtdiff /home/test/filecmp/dir1 /ho