系统性能信息模块 - psulib 与 文本比较序列模块 - difflib 应用项目实践

知识点 1>

PyCharm 连接服务器进行远程开发和调试:
1. 配置目录同步
2. 配置远程python解释器

参考文献:https://zhuanlan.zhihu.com/p/38330654

知识点 2>

python 时间模块 —— time

Time 的表示方式

在Python中,通常① 时间戳,② 格式化的时间字符串,③ 格式化的元组 三种方式表示时间

  • 时间戳 (timestamp)

timestamp通常表示从1970年1月1日00时00分00秒开始,按秒计算的偏移量
也就是从1970年1月1日00时00分00(北京时间:1970年1月1日08时00分00)起,到现在的毫秒数

from time import *
print(time())

1542352379.598851

  • 时间格式化符号

  • struct_time 元组 —— Python函数用一个元组装起来的九个数字处理时间

该元组共有 9 个元素:
年、月、日、时、分、秒、一年中的第几周、一年中的第几天、是否为夏令时

time 模块 常用函数

 

  • time() :用于返回当前时间的时间戳(timestamp),不需要传递参数

  • localtime([sces]):作用是将时间戳转换为本地时间,secs指转换为stuct_time类型的对象秒数;如果secs参数未输入,就以当前时间为转换标准,返回结果为时间元组(stuct_time)

  • gmtime([secs]):作用是将时间戳转换为本地时间,区别在于后者以UTC时区(0时区)转换时间戳

  • mktime(t):用于执行localtime([sces]) ;gmtime([secs])的反向操作,接收sturct_time对象作为参数(t),返回秒数表示的时间的浮点数;            其中,参数t表示结构化的时间或完整的9位元素

  • strftime(format[,t]): 用于接收时间元组,返回可读字符串标识当地时间;

  • strptime(string[,format]) :可以理解为前者的反向操作,将指定格式的字符串拆解为时间元组

  • sleep(secs):用于推迟调用线程的运行,可通过secs参数指定进程挂起的时间;secs参数代表推迟执行的秒数

# 备注为执行结果
from time import *
print(localtime()) # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=16, tm_hour=15, tm_min=42, tm_sec=25, tm_wday=4, tm_yday=320, tm_isdst=0)
print(gmtime())    # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=16, tm_hour=7, tm_min=42, tm_sec=25, tm_wday=4, tm_yday=320, tm_isdst=0)
print(mktime(localtime())) # 1542354145.0
t = (2018,3,11,16,50,38,0,0,0)
print(strftime('%a %b %d %Y %H:%M:%S',localtime(mktime(t)))) # Sun Mar 11 2018 16:50:38
print(strptime('May 24 13 40 53 2018','%b %d %H %M %S %Y')) # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=24, tm_hour=13, tm_min=40, tm_sec=53, tm_wday=3, tm_yday=144, tm_isdst=-1)

python 时间处理模块 —— datetime

datetime模块定义了以下几个类:

  • In:datetime.now()
  • Out :datetime.datetime(2019, 8, 7, 19, 40, 55, 623142)
  • In : datetime.strftime( datetime.now(), "%Y-%m")
  • Out : '2019-08'

知识点 3>

python 重要模块 —— psutil 简介:

psutil(进程和系统实用程序):是一个跨平台库,用于 在Python中检索有关正在运行的进程系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它主要用于系统监视分析和限制流程资源以及运行流程的管理

模块安装:

  • pip3 install psutil -i https://pypi.douban.com/simple

psutil 模块实例应用:

1.CPU  中央处理器

2. memory 内存

3.Disk 磁盘

4.network 网络

综合实例应用 —— 编写一段python 程序实现对 linux服务器主机信息监控:

# os模块, operate system, 跟操作系统相关的方法, 多是文件操作等
import os
import  platform
from datetime import  datetime
import  time
try:
    # 如果是Linux系统,执行下面内容
    # os.uname在windows系统中不能执行
    system_info = os.uname()
    node = system_info.nodename
    system = system_info.sysname
except Exception as e:
    # 如果是Windows系统,执行下面内容
    system_info = platform.uname()
    node = system_info.node
    system = system_info.system

import psutil
boot_time = psutil.boot_time()
boot_time =  datetime.fromtimestamp(boot_time)
now_time =  datetime.fromtimestamp(time.time())

print("""
***********************************主机信息监控********************************
        主机名: %s
        操作系统: %s
        内核名称: %s
        发行版本号: %s
        内核版本: %s
        系统架构: %s
        当前时间: %s
        开机时间: %s
        开机时长: %s
""" %(node, system, system,
      system_info.release, system_info.version, system_info.machine,
      now_time, boot_time, now_time-boot_time
      ))

测试结果:

应用项目 —— Sysinfo

环境配置:

  1. dnf install gcc python3-devel -y                                              # 安装 开发包
  2. pip3 install psutil -i https://pypi.douban.com/simple               # 获取系统运行信息
  3. pip3 install prettytable -i https://pypi.douban.com/simple       # 表格优化

项目主要应用模块及框架

  • psutil —— 是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。
  • time / datetime —— 时间模块
  • Django ——django是用python语言写的开源web开发框架,并遵循MVC设计。
  • Bootstrap —— 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。

代码参考文献:https://github.com/lvah/Sysinfo

项目流程:

  1. 安装 Bootstrap (一个用于快速开发 Web 应用程序和网站的前端框架)
  2. 创建Django项目Sysinfo —— django-admin startproject Sysinfo
  3. 创建子应用 —— python3 manage.py startapp host
  4. 后台管理(略过,本项目不需要)
  5. 路由设置和视图函数的编写
  6. 模板的编写

第一阶段测试:

NO.1 阶段 上传项目代码到GitHub          Sysinfo 项目仓库代码查看地址:https://github.com/dodo837132863/Sysinfo

  • git init

Initialized empty Git repository in /root/PycharmProjects/untitled/Sysinfo/.git/  

#初始化的空Git存储库在/root/ pycharmprojects /untitled/Sysinfo/.git/

  • git add  *                                                                                                       # 添加所有项目文件到本地仓库

  • git commit -m "NO.1 Sysinfo Update the configuration Monitor 'system information', 'disk information' and 'user login information' "

  • git log
  •  git remote add origin https://github.com/dodo837132863/Sysinfo.git
  •  git push -u origin master

Username for 'https://github.com': dodo837132863
Password for 'https://dodo837132863@github.com':

Branch 'master' set up to track remote branch 'master' from 'origin'.                  # 上传成功

diffib 模块 对比文件差异性

1. if __name__=="__main__"是什么含义?
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,if 以下代码块将被运行,当模块是被导入时,代码块不被运行。

1. hashlib模块
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
2. 摘要算法
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
3. 摘要算法的有效性:
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,
但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

代码:

import difflib
import  hashlib

def find_file_different(filename1, filename2, output_filename):
    # 1. 需要分析两个配置文件的不同,需要读取文件的内容
    # 如果是windows系统, 目录路径的分隔符是\, 一定要转义
    # 如果是Linux系统, 目录路径的分隔符是/, 不需要转义
    with open(filename1) as f:
        # 读取文件的所有内容,以列表的数据格式存储,每个元素是一行内容。
        content1 = f.readlines()
    with open(filename2) as f:
        content2 = f.readlines()

    # 2. 通过diflib模块对文件内容进行对比
    # # 2-1). we instantiate a Differ object
    # diff = difflib.Differ()
    # # 2-2). Finally, we compare the two: result = list(d.compare(text1, text2))
    # results = diff.compare(content1, content2)
    # for result in results:
    #     # result是字符串, result.strip方法是删除字符串前面和后面的空格(广义的空格\n, \t,' ')
    #     print(result.strip())
    # 2-3). 以更美观的方式对文件差异性对比进行展示
    hdiff = difflib.HtmlDiff()
    result = hdiff.make_file(content1, content2)  # 会禅城一个html字符串
    # 将产生的字符串存储到html文件中
    # 文件存储的方法1:python 04_配置文件差异性对比.py  > output/diff.html
    # print(result)
    # 文件存储的方法2: 通过python方法写入文件
    with open(output_filename, 'w') as f:
        f.write(result)
        print("写入html文件[%s]成功" % (output_filename))

def test_fun1():
    # 我的代码是Windows系统
    filename1 = 'input\\nginx_backup_20200725.conf'
    filename2 = 'input\\nginx_backup_20200726.conf'
    output_filename = 'output/diff.html'
    find_file_different(filename1, filename2, output_filename)

def is_same_file(filename1, filename2):
    """
    1. hashlib模块
    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
    2. 摘要算法
    摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
    3. 摘要算法的有效性:
    摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,
    但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
    """
    with open(filename1) as f:
        # 读取文件的所有内容,以列表的数据格式存储,每个元素是一行内容。
        content1 = f.read()
        # 第一种摘要算法的实现方式
        # 注意: python3中所有的字符串默认是unicode编码格式,如果需要utf-8编码的时候,使用encode方法进行编码操作
        """
        ASCII编码:只能存储英文信息(字母,数字,符号),一个字符占用一个字节,1字节=8位 2^8-1
        Unicode编码:是可以支持多种语言,一个字符占用2个字节,2字节=16位, 2^16-1
        utf-8编码:如果是中文,占用3个字节,如果是英文

        md1 = hashlib.md5()
        md1.update(content1.encode('utf-8'))
        hex_content1 = md1.hexdigest()
    with open(filename2) as f:
        content2 = f.read()
        md1 = hashlib.md5(content2.encode('utf-8'))
        hex_content2 = md1.hexdigest()
    return  hex_content1 == hex_content2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值