翼度科技»论坛 编程开发 python 查看内容

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

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
一、hashlib模块

什么是哈希模块:
hashlib模块是一种加密模块,内部存有多种加密类型
加密的作用:
可将明文数据进行加密,转换成一串密文,密文越长说明文件加密的越复杂
加密算法的种类:

  • md5
  • base64
  • hmac
  • sha系列(sha1、sha224、sha256等等)
补充说明:
1.算法不变,如果内容相同,那么加密的结果肯定相同
2.待加密的明文,可以一次传入,也可分多次传入,不会影响密文的结果
3.加密的结果是无法反解密的
4.加盐处理:

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

  • 可应用于用户登录时,对密码的加密
文件安全性校验

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



基本操作与用法

导入模块:
  1. import hashlib
复制代码
具体用法:
  1. 1、选择加密算法:    md5 = hashlib.md5()
  2. 2、传入明文:    md5.update(b'hello')     # 传入的明文需提前转换成二进制的方式
  3. 3、获取加密密文:    res = md5.hexdigets()    print(res)      # 5d41402abc4b2a76b9719d911017c592
复制代码
二、subprocess模块简介

什么是subprocess模块:
subprocess是python内置的模块,这个模块中的Popen可以查看用户输入的命令行是否存在
如果存在,把内容写入到stdout管道中
如果不存在,把信息写入到stderr管道
要注意的是,这个模块的返回结果只能让开发者看一次,如果想多次查看,需要在第一次输出的时候,把所有信息写入到变量中。
基本操作与用法

模块导入:
  1. import subprocess
复制代码
基本格式:
  1. subprocess.Popen('命令',
  2.              shell = True,
  3.              stdout = subprocess.PIPE,
  4.              stderr = subprocess.PIPE)
复制代码

  • shell=True 表示要在终端中运行的命令
  • stdout=sbuprocess.PIPE 表示当命令存在的时候,把结果写入到stdout管道
  • stderr=sbuprocess.PIPE 表示当命令不存在的时候,把结果吸入到stderr管道
具体用法:
  1. import subprocess
  2. r = subprocess.Popen('xxxx', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  3. print(r.stdout.read().decode('utf8'))
  4. print(r.stderr.read().decode('utf8'))
复制代码
三、logging模块简介

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

  • 产生日志
  • 过滤日志
  • 输出日志
  • 日志格式
日志的等级:
DEBUG

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

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

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

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

  • 当发生严重错误,导致应用程序不能继续运行时记录的信息
掌握层度:
longging日志模块,内置方法与代码相对固定,在使用时,只需根据个人要求,对内部变量稍作修改即可使用
基本操作与用法

导入模块:
  1. import logging
复制代码
打印日志级别:
  1. logging.debug('Python debug')
  2. logging.info('Python info')
  3. logging.warning('Python warning')
  4. logging.error('Python Error')
  5. logging.critical('Python critical')
  6. -------------------------------------------------------------------
  7. WARNING:root:Python warning
  8. ERROR:root:Python Error
  9. CRITICAL:root:Python critical
复制代码
当指定一个日志级别之后,会记录大于或等于这个日志级别的日志信息,小于的将会被丢弃, 默认情况下日志打印只显示大于等于 WARNING 级别的日志。
代码用法:
  1. import logging
  2. logger = logging.getLogger("simple_example")
  3. logger.setLevel(logging.DEBUG)
  4. # 建立一个filehandler来把日志记录在文件里,级别为debug以上
  5. fh = logging.FileHandler("spam.log")
  6. fh.setLevel(logging.DEBUG)
  7. # 建立一个streamhandler来把日志打在CMD窗口上,级别为error以上
  8. ch = logging.StreamHandler()
  9. ch.setLevel(logging.ERROR)
  10. # 设置日志格式
  11. formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
  12. ch.setFormatter(formatter)
  13. fh.setFormatter(formatter)
  14. #将相应的handler添加在logger对象中
  15. logger.addHandler(ch)
  16. logger.addHandler(fh)
  17. # 开始打日志
  18. logger.debug("debug message")
  19. logger.info("info message")
  20. logger.warn("warn message")
  21. logger.error("error message")
  22. logger.critical("critical message")
复制代码
日志模板:
  1. import logging
  2. import logging.config
  3. # 定义日志输出格式 开始
  4. standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
  5.                   '[%(levelname)s][%(message)s]'  # 其中name为getlogger指定的名字
  6. simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
  7. # 自定义文件路径
  8. logfile_path = 'a3.log'
  9. LOGGING_DIC = {
  10.     'version': 1,
  11.     'disable_existing_loggers': False,
  12.     'formatters': {
  13.         'standard': {
  14.             'format': standard_format
  15.         },
  16.         'simple': {
  17.             'format': simple_format
  18.         },
  19.     },
  20.     'filters': {},  # 过滤日志
  21.     'handlers': {
  22.         # 打印到终端的日志
  23.         'console': {
  24.             'level': 'DEBUG',
  25.             'class': 'logging.StreamHandler',  # 打印到屏幕
  26.             'formatter': 'simple'
  27.         },
  28.         # 打印到文件的日志,收集info及以上的日志
  29.         'default': {
  30.             'level': 'DEBUG',
  31.             'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
  32.             'formatter': 'standard',
  33.             'filename': logfile_path,  # 日志文件
  34.             'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
  35.             'backupCount': 5,
  36.                 # 这里两个参数的意思是一个日志文件最多写5M,最多可以存在五个不同的日志文件,但是当数量达到五个之后就会出现最早的那个会被删除,
  37.                 # 然后再产生一个新的文件(类似于覆盖了最早的那个文件)
  38.             'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
  39.         },
  40.     },
  41.     'loggers': {
  42.         # logging.getLogger(__name__)拿到的logger配置
  43.         '': {
  44.             'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
  45.             'level': 'DEBUG',
  46.             'propagate': True,  # 向上(更高level的logger)传递
  47.         },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
  48.         # '购物车记录': {
  49.         #     'handlers': ['default','console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
  50.         #     'level': 'WARNING',
  51.         #     'propagate': True,  # 向上(更高level的logger)传递
  52.         # },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
  53.     },
  54. }
  55. logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置
  56. # logger1 = logging.getLogger('购物车记录')
  57. # logger1.warning('尊敬的VIP客户 晚上好 您又来啦')
  58. # logger1 = logging.getLogger('注册记录')
  59. # logger1.debug('jason注册成功')
  60. logger1 = logging.getLogger('红浪漫顾客消费记录')
  61. # 当这里的getLogger内部的参数如果字典中没有,就会自动使用字典中名称为空的那个模版来执行
  62. logger1.debug('慢男 猛男 骚男')
复制代码
以上就是Python基础之hashlib模块subprocess模块logging模块的详细内容,更多关于Python hashlib subprocess logging的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/article/266710.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具