Python基础之hashlib模块subprocess模块logging模块

 更新时间:2022年11月04日 10:54:26   作者:Kkkkangsh  
这篇文章主要为大家介绍了Python基础之hashlib模块subprocess模块logging模块示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、hashlib模块

什么是哈希模块:

hashlib模块是一种加密模块,内部存有多种加密类型

加密的作用:

可将明文数据进行加密,转换成一串密文,密文越长说明文件加密的越复杂

加密算法的种类:

  • md5
  • base64
  • hmac
  • sha系列(sha1、sha224、sha256等等)

补充说明:

1.算法不变,如果内容相同,那么加密的结果肯定相同

2.待加密的明文,可以一次传入,也可分多次传入,不会影响密文的结果

3.加密的结果是无法反解密的

4.加盐处理:

  • 4.1.加盐处理的意思是指:在明文内加入干扰项,可改变密文的结果,来提高被加密的安全性
  • 4.2.动态加盐:指干扰项是动态的,在加盐的基础上更大程度上提高被加密文件的安全性

应用方向:

用户密码加密

  • 可应用于用户登录时,对密码的加密

文件安全性校验

  • 可对文件进行加密,通过比对文件的密文来判断文件是否被修改

基本操作与用法

导入模块:

import hashlib

具体用法:

1、选择加密算法:
    md5 = hashlib.md5()

2、传入明文:
    md5.update(b'hello')  
   # 传入的明文需提前转换成二进制的方式

3、获取加密密文:
    res = md5.hexdigets()
    print(res)  
    # 5d41402abc4b2a76b9719d911017c592

二、subprocess模块简介

什么是subprocess模块:

subprocess是python内置的模块,这个模块中的Popen可以查看用户输入的命令行是否存在

如果存在,把内容写入到stdout管道中

如果不存在,把信息写入到stderr管道

要注意的是,这个模块的返回结果只能让开发者看一次,如果想多次查看,需要在第一次输出的时候,把所有信息写入到变量中。

基本操作与用法

模块导入:

import subprocess

基本格式:

subprocess.Popen('命令',
             shell = True,
             stdout = subprocess.PIPE,
             stderr = subprocess.PIPE)
  • shell=True 表示要在终端中运行的命令
  • stdout=sbuprocess.PIPE 表示当命令存在的时候,把结果写入到stdout管道
  • stderr=sbuprocess.PIPE 表示当命令不存在的时候,把结果吸入到stderr管道

具体用法:

import subprocess
r = subprocess.Popen('xxxx', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(r.stdout.read().decode('utf8'))
print(r.stderr.read().decode('utf8'))

三、logging模块简介

什么是logging模块:

loggin模块是用来写日志的,以前我们写日志需要自己往文件里写记录信息,使用了logging之后我们只需要一次配置好,以后写日志的事情都不需要我们操心了,非常方便

日志的组成:

  • 产生日志
  • 过滤日志
  • 输出日志
  • 日志格式

日志的等级:

DEBUG

  • 最详细的日志信息,典型应用场景是 问题诊断

INFO

  • 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作

WARNING

  • 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的

ERROR

  • 由于一个更严重的问题导致某些功能不能正常运行时记录的信息

CRITICAL

  • 当发生严重错误,导致应用程序不能继续运行时记录的信息

掌握层度:

longging日志模块,内置方法与代码相对固定,在使用时,只需根据个人要求,对内部变量稍作修改即可使用

基本操作与用法

导入模块:

import logging

打印日志级别:

logging.debug('Python debug')
logging.info('Python info')
logging.warning('Python warning')
logging.error('Python Error')
logging.critical('Python critical')
-------------------------------------------------------------------
WARNING:root:Python warning
ERROR:root:Python Error
CRITICAL:root:Python critical

当指定一个日志级别之后,会记录大于或等于这个日志级别的日志信息,小于的将会被丢弃, 默认情况下日志打印只显示大于等于 WARNING 级别的日志。

代码用法:

import logging
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)
# 建立一个filehandler来把日志记录在文件里,级别为debug以上
fh = logging.FileHandler("spam.log")
fh.setLevel(logging.DEBUG)
# 建立一个streamhandler来把日志打在CMD窗口上,级别为error以上
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# 设置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
ch.setFormatter(formatter)
fh.setFormatter(formatter)
#将相应的handler添加在logger对象中
logger.addHandler(ch)
logger.addHandler(fh)
# 开始打日志
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

日志模板:

import logging
import logging.config
# 定义日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'  # 其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 自定义文件路径
logfile_path = 'a3.log'
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # 过滤日志
    'handlers': {
        # 打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        # 打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
            'backupCount': 5,
                # 这里两个参数的意思是一个日志文件最多写5M,最多可以存在五个不同的日志文件,但是当数量达到五个之后就会出现最早的那个会被删除,
                # 然后再产生一个新的文件(类似于覆盖了最早的那个文件)
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        # logging.getLogger(__name__)拿到的logger配置
        '': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
        # '购物车记录': {
        #     'handlers': ['default','console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
        #     'level': 'WARNING',
        #     'propagate': True,  # 向上(更高level的logger)传递
        # },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
    },
}
logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置
# logger1 = logging.getLogger('购物车记录')
# logger1.warning('尊敬的VIP客户 晚上好 您又来啦')
# logger1 = logging.getLogger('注册记录')
# logger1.debug('jason注册成功')
logger1 = logging.getLogger('红浪漫顾客消费记录')
# 当这里的getLogger内部的参数如果字典中没有,就会自动使用字典中名称为空的那个模版来执行
logger1.debug('慢男 猛男 骚男')

以上就是Python基础之hashlib模块subprocess模块logging模块的详细内容,更多关于Python hashlib subprocess logging的资料请关注脚本之家其它相关文章!

相关文章

  • pandas 实现字典转换成DataFrame的方法

    pandas 实现字典转换成DataFrame的方法

    今天小编就为大家分享一篇pandas 实现字典转换成DataFrame的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • django+echart绘制曲线图的方法示例

    django+echart绘制曲线图的方法示例

    这篇文章主要介绍了django+echart绘制曲线图的方法示例,可以了解Django中aggregate和annotate函数的使用方法及其Django+Echarts绘制柱状图的完整示例,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python socket模块ftp传输文件过程解析

    Python socket模块ftp传输文件过程解析

    这篇文章主要介绍了Python socket模块ftp传输文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 一文深入了解Python中的继承知识点

    一文深入了解Python中的继承知识点

    Python 是面向对象的编程语言,因此支持面向对象的三大特性之一:继承。本文就带大家了解了解Python中继承的相关知识点,感兴趣的可以了解一下
    2022-11-11
  • python实现随机漫步算法

    python实现随机漫步算法

    这篇文章主要为大家详细介绍了python实现随机漫步算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python爬虫实现抓取电影网站信息并入库

    Python爬虫实现抓取电影网站信息并入库

    本文主要介绍了利用Python爬虫实现抓取电影网站信息的功能,并将抓取到的信息入库。文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-02-02
  • Python+Matplotlib绘制高亮显示饼图的示例代码

    Python+Matplotlib绘制高亮显示饼图的示例代码

    饼图 (Pie Chart) 是一种圆形统计图,被分割成片用于表示数值间的比例关系,本文为大家介绍了Matplotlib绘制高亮显示的饼图的函数源码,需要的可以参考一下
    2023-06-06
  • python机器学习实现决策树

    python机器学习实现决策树

    这篇文章主要为大家详细介绍了python机器学习实现决策树,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Pandas 重塑(stack)和轴向旋转(pivot)的实现

    Pandas 重塑(stack)和轴向旋转(pivot)的实现

    这篇文章主要介绍了Pandas 重塑(stack)和轴向旋转(pivot)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python函数基本使用原理详解

    Python函数基本使用原理详解

    这篇文章主要介绍了Python函数基本使用原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论