集美大学网络管理实验五.docx

上传人:b****3 文档编号:596301 上传时间:2022-10-11 格式:DOCX 页数:12 大小:326.07KB
下载 相关 举报
集美大学网络管理实验五.docx_第1页
第1页 / 共12页
集美大学网络管理实验五.docx_第2页
第2页 / 共12页
集美大学网络管理实验五.docx_第3页
第3页 / 共12页
集美大学网络管理实验五.docx_第4页
第4页 / 共12页
集美大学网络管理实验五.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

集美大学网络管理实验五.docx

《集美大学网络管理实验五.docx》由会员分享,可在线阅读,更多相关《集美大学网络管理实验五.docx(12页珍藏版)》请在冰豆网上搜索。

集美大学网络管理实验五.docx

集美大学网络管理实验五

实验五业务服务监控详解

(一)

一、实验目的

本实验的主要目的是通过运用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模板冲突,后面进行修改后就可以执行出正确的结果了。

此外,在编写执行文件时要细心谨慎,很多问题都是在写代码的时候出错,可能一个标点符号,字母出错就使程序无法执行,花费了大量时间找问题,所以要认真谨慎。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1