集美大学网络管理实验五.docx
- 文档编号:596301
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:12
- 大小:326.07KB
集美大学网络管理实验五.docx
《集美大学网络管理实验五.docx》由会员分享,可在线阅读,更多相关《集美大学网络管理实验五.docx(12页珍藏版)》请在冰豆网上搜索。
集美大学网络管理实验五
实验五业务服务监控详解
(一)
一、实验目的
本实验的主要目的是通过运用Python第三方系统基础模块,快速、有效地开发企业级服务监控平台,设计文件与目录差异对比方法、HTTP质量监控、邮件告警等内容。
二、实验内容
1、文件内容差异对比方法。
2、文件与目录差异对比方法。
三、实验工具
1、linux
2、python及相关的第三方基础模块
四、实验步骤
模块介绍
我们可以通过Python的标准库模块(Python2.3以上就已经自带)difflib模块来实现文件内容的文本差异对比。
并且支持输出可读性比较强的HTML文档,与Linux下的diff 命令相似。
可以使用difflib对比代码,配置文件的差别,在版本控制方面非常有用。
5.1实现两个字符串的差异对比
在下列示例程序中,定义了两个字符串,对比差异之后以版本控制风格进行输出。
你的运行结果截屏放于此处。
在上面的结果中,发现字符串下面有符号标记。
其符号含义如下:
符号
含义
’-‘
包含在第一个系列行中,但不包含第二个。
’+‘
包含在第二个系列行中,但不包含第一个。
’‘
两个序列行一致
’?
‘
标志两个序列行存在增量差异
’^‘
标志着两个序列行存在的差异字符
然后现在再来分析一下上面的结果。
分析结果(此处写出你的分析结果):
Text1与text2文档存在增量差异以及字符差异
Text1里包含而text2没有
5.2将字符串对比结果生成美观的HTML格式文档
difflib中的HtmlDiff()类支持将比较结果输出为HTML格式,其HtmlDiff()类中的make_file()方法可以生成美观的html文档。
我们依旧采用上面的代码,做一些简单的修改:
将新文件命名为Difflib.py,运行pythonDifflib.py>Text.html,再使用浏览器打开Text.html文件。
运行结果截屏。
此处放置你的程序运行结果截屏。
pythonDifflib.py>Text.html
使用浏览器打开Text.html文件,
会发现一个新的问题出来了,我们使用网页打开我们输出的Text.html文件,显示效果如下,换了多个浏览器也是一致乱码。
发现只要是显示中文,包括中文和中文输入法的字符都会出现乱码。
查看Text.html文本
将utf-8编码改为同样支持中文编码的gbk后,重新使用浏览器打开Text.html文件发现中文显示正常。
此HTML 文档包括了行号、差异标志、图例等信息,可读性增强了很多。
模块介绍
Python2.3以上的版本默认自带了模块,无需额外安装。
我们可以用这个模块来检查原式与目标文件的一致性,可以实现文件、目录、遍历子目录的差异对比功能。
模块使用
提供了三个操作方法。
∙cmp:
单文件对比
∙cmpfiles:
多文件对比
∙dircmp:
目录对比
5.3单文件对比
使用的是(f1,f2[,shallow])。
其中f1、f2为文件,当两个文件相同时返回True,不同返回False,(shallow默认为True,其意思是只根据os.stat()方法返回的文件基本信息进行对比[最后访问时间、修改时间、状态改变时间等,而不考虑文件内容])。
当shallow为False时,则os.stat()与文件内容同时进行校验。
(1)在/home路径下创建test文件夹,在test文件夹下创建文件夹,在/路径下在代码的当前路径/home/test/。
在文件夹下创建两个名为、的文件,在File1中敲入你的姓名,性别。
在File3中敲入你的学号。
和创建结束。
接着创建,它是的副本文件,即直接由复制文件并改名得到。
所以按理来说、两个文件完全相同、而与文件不同。
下面使用代码进行验证:
5.4多文件对比
比较两个文件夹内指定文件是否相等。
参数dir1, dir2指定要比较的文件夹,参数common指定要比较的文件名列表。
函数返回包含3个list元素的元组,分别表示匹配、不匹配以及错误的文件列表。
错误的文件指的是不存在的文件,或文件被锁定不可读,或没权限读文件,或者由于其他原因访问不了该文件。
●在刚才创建的/路径下,创建两个文件夹dir1和dir2。
形成/home/test//dir1和/home/test//dir2。
●具体过程:
首先创建dir1,dir1下创建以上五个文件。
文件内容可以随意的填写。
再创建第二个文件夹dir2。
将文件夹dir1中的和(,它是的副本文件,即直接由复制文件并改名得到)拷贝到dir2下。
再创建新的命名为和两个文件。
和文件内容可随意添加。
dir2
形成下目录tree图:
进入dir1目录下,输入命令:
md5sum*
得到下列文件是dir1文件夹下所有文件的MD5值(你所得的值与下列值格式类似但具体值不同,将你的所得截屏)
FBAAF8CC3C1DF70B183CB8E8FBDFC57C*
FBAAF8CC3C1DF70B183CB8E8FBDFC57C*
16EC37C499F64FC60E95650B500E30A4*
202CB962AC59075B964B07152D234B70*
进入dir1目录下,输入命令:
md5sum*
下列文件是dir2文件夹下所有文件的MD5值(你所得的值与下列值格式类似但具体值不同,将你的所得截屏)
FBAAF8CC3C1DF70B183CB8E8FBDFC57C*
FBAAF8CC3C1DF70B183CB8E8FBDFC57C*
D41D8CD98F00B204E9800998ECF8427E*
CB30FC9CEC9A2D04EF49B22E2066C264*
#根据MD5值可以知道,两个文件夹下的、相匹配,
#而不匹配,
#另外对于和两个文件只在各自的目录下存在。
使用示例代码验证:
5.5目录对比
目录对比,通过(a,b[,ignore[,hide]])类创建一个目录比较对象用于比较文件夹,通过该类比较两个文件夹,可以获取一些详细的比较结果(如只在A文件夹存在的文件列表),并支持子文件夹的递归比较。
dircmp提供了三个方法用于报告比较的结果:
∙report():
只比较指定文件夹中的内容(文件与文件夹)
∙report_partial_closure():
比较文件夹及第一级子文件夹的内容
∙report_full_closure():
递归比较所有的文件夹的内容
另外为了输出更加详细的信息,dircmp类还提供了以下属性:
∙left_list:
左边文件夹中的文件与文件夹列表;
∙right_list:
右边文件夹中的文件与文件夹列表;
∙common:
两边文件夹中都存在的文件或文件夹;
∙left_only:
只在左边文件夹中存在的文件或文件夹;
∙right_only:
只在右边文件夹中存在的文件或文件夹;
∙common_dirs:
两边文件夹都存在的子文件夹;
∙common_files:
两边文件夹都存在的子文件;
∙common_funny:
两边文件夹都存在的子文件夹;
∙same_files:
匹配的文件;
∙diff_files:
不匹配的文件;
∙funny_files:
两边文件夹中都存在,但无法比较的文件;
∙subdirs:
将common_dirs 目录映射到新的dircmp对象,格式为字典的类型。
示例代码,比较dir1和dir2文件夹目录的差异
#-*-coding:
utf-8-*-
import
a="/home/test//dir1"#定义左目录
b="/home/test//dir2"#定义右目录
dirobj=(a,b,['EXT.txt'])#目录比较,忽略EXT.txt文件
#输出对比结果数据报表,详细说明请参考类方法及属性信息
dirobj.report()
dirobj.report_partial_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))
print("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
diff/home/test//dir1/home/test//dir2
Onlyin/home/test//dir1:
['']
Onlyin/home/test/dir2:
['']
Identicalfiles:
['','']
Differingfiles:
['']
diff/home/test//home/test/
Onlyin/home/test/dir1:
['']
Onlyin/home/test/dir2:
['']
Identicalfiles:
['','']
Differingfiles:
['']
diff/home/test//home/test/
Only/home/test/dir1:
['']
Only/home/test/dir2:
['']
Identicalfiles:
['','']
Differingfiles:
['']
left_list:
['','','','']
right_list:
['','','','']
common:
['','','']
left_only:
['']
right_only:
['']
common_dirs:
[]
common_files:
['','','']
common_funny:
[]
same_file:
['','']
diff_files:
['']
funny_files:
[]
五、实验报告
实验过程中有遇到很多问题,比如在文件内容差异比较的时候,编写vi文件名时我一开始输入的时difflib执行结果始终错误,可能是与文件里的difflib模板冲突,后面进行修改后就可以执行出正确的结果了。
此外,在编写执行文件时要细心谨慎,很多问题都是在写代码的时候出错,可能一个标点符号,字母出错就使程序无法执行,花费了大量时间找问题,所以要认真谨慎。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 网络 管理 实验