欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python基礎(chǔ)之hashlib模塊subprocess模塊logging模塊

 更新時間:2022年11月04日 10:54:26   作者:Kkkkangsh  
這篇文章主要為大家介紹了Python基礎(chǔ)之hashlib模塊subprocess模塊logging模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、hashlib模塊

什么是哈希模塊:

hashlib模塊是一種加密模塊,內(nèi)部存有多種加密類型

加密的作用:

可將明文數(shù)據(jù)進行加密,轉(zhuǎn)換成一串密文,密文越長說明文件加密的越復(fù)雜

加密算法的種類:

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

補充說明:

1.算法不變,如果內(nèi)容相同,那么加密的結(jié)果肯定相同

2.待加密的明文,可以一次傳入,也可分多次傳入,不會影響密文的結(jié)果

3.加密的結(jié)果是無法反解密的

4.加鹽處理:

  • 4.1.加鹽處理的意思是指:在明文內(nèi)加入干擾項,可改變密文的結(jié)果,來提高被加密的安全性
  • 4.2.動態(tài)加鹽:指干擾項是動態(tài)的,在加鹽的基礎(chǔ)上更大程度上提高被加密文件的安全性

應(yīng)用方向:

用戶密碼加密

  • 可應(yīng)用于用戶登錄時,對密碼的加密

文件安全性校驗

  • 可對文件進行加密,通過比對文件的密文來判斷文件是否被修改

基本操作與用法

導(dǎo)入模塊:

import hashlib

具體用法:

1、選擇加密算法:
    md5 = hashlib.md5()

2、傳入明文:
    md5.update(b'hello')  
   # 傳入的明文需提前轉(zhuǎn)換成二進制的方式

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

二、subprocess模塊簡介

什么是subprocess模塊:

subprocess是python內(nèi)置的模塊,這個模塊中的Popen可以查看用戶輸入的命令行是否存在

如果存在,把內(nèi)容寫入到stdout管道中

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

要注意的是,這個模塊的返回結(jié)果只能讓開發(fā)者看一次,如果想多次查看,需要在第一次輸出的時候,把所有信息寫入到變量中。

基本操作與用法

模塊導(dǎo)入:

import subprocess

基本格式:

subprocess.Popen('命令',
             shell = True,
             stdout = subprocess.PIPE,
             stderr = subprocess.PIPE)
  • shell=True 表示要在終端中運行的命令
  • stdout=sbuprocess.PIPE 表示當(dāng)命令存在的時候,把結(jié)果寫入到stdout管道
  • stderr=sbuprocess.PIPE 表示當(dāng)命令不存在的時候,把結(jié)果吸入到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之后我們只需要一次配置好,以后寫日志的事情都不需要我們操心了,非常方便

日志的組成:

  • 產(chǎn)生日志
  • 過濾日志
  • 輸出日志
  • 日志格式

日志的等級:

DEBUG

  • 最詳細的日志信息,典型應(yīng)用場景是 問題診斷

INFO

  • 信息詳細程度僅次于DEBUG,通常只記錄關(guān)鍵節(jié)點信息,用于確認一切都是按照我們預(yù)期的那樣進行工作

WARNING

  • 當(dāng)某些不期望的事情發(fā)生時記錄的信息(如,磁盤可用空間較低),但是此時應(yīng)用程序還是正常運行的

ERROR

  • 由于一個更嚴(yán)重的問題導(dǎo)致某些功能不能正常運行時記錄的信息

CRITICAL

  • 當(dāng)發(fā)生嚴(yán)重錯誤,導(dǎo)致應(yīng)用程序不能繼續(xù)運行時記錄的信息

掌握層度:

longging日志模塊,內(nèi)置方法與代碼相對固定,在使用時,只需根據(jù)個人要求,對內(nèi)部變量稍作修改即可使用

基本操作與用法

導(dǎo)入模塊:

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

當(dāng)指定一個日志級別之后,會記錄大于或等于這個日志級別的日志信息,小于的將會被丟棄, 默認情況下日志打印只顯示大于等于 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)
# 設(shè)置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
ch.setFormatter(formatter)
fh.setFormatter(formatter)
#將相應(yīng)的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,
                # 這里兩個參數(shù)的意思是一個日志文件最多寫5M,最多可以存在五個不同的日志文件,但是當(dāng)數(shù)量達到五個之后就會出現(xiàn)最早的那個會被刪除,
                # 然后再產(chǎn)生一個新的文件(類似于覆蓋了最早的那個文件)
            'encoding': 'utf-8',  # 日志文件的編碼,再也不用擔(dān)心中文log亂碼了
        },
    },
    'loggers': {
        # logging.getLogger(__name__)拿到的logger配置
        '': {
            'handlers': ['default', 'console'],  # 這里把上面定義的兩個handler都加上,即log數(shù)據(jù)既寫入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)傳遞
        },  # 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認都會使用該k:v配置
        # '購物車記錄': {
        #     'handlers': ['default','console'],  # 這里把上面定義的兩個handler都加上,即log數(shù)據(jù)既寫入文件又打印到屏幕
        #     'level': 'WARNING',
        #     'propagate': True,  # 向上(更高level的logger)傳遞
        # },  # 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認都會使用該k:v配置
    },
}
logging.config.dictConfig(LOGGING_DIC)  # 自動加載字典中的配置
# logger1 = logging.getLogger('購物車記錄')
# logger1.warning('尊敬的VIP客戶 晚上好 您又來啦')
# logger1 = logging.getLogger('注冊記錄')
# logger1.debug('jason注冊成功')
logger1 = logging.getLogger('紅浪漫顧客消費記錄')
# 當(dāng)這里的getLogger內(nèi)部的參數(shù)如果字典中沒有,就會自動使用字典中名稱為空的那個模版來執(zhí)行
logger1.debug('慢男 猛男 騷男')

以上就是Python基礎(chǔ)之hashlib模塊subprocess模塊logging模塊的詳細內(nèi)容,更多關(guān)于Python hashlib subprocess logging的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于python中time和datetime的區(qū)別與用法

    關(guān)于python中time和datetime的區(qū)別與用法

    這篇文章主要介紹了關(guān)于python中time和datetime的區(qū)別與用法,Python中封裝了很多實用的函數(shù),那么關(guān)于時間的函數(shù)time和datetime有什么區(qū)別和作用,讓我們來看看吧
    2023-03-03
  • python簡單實現(xiàn)矩陣的乘,加,轉(zhuǎn)置和逆運算示例

    python簡單實現(xiàn)矩陣的乘,加,轉(zhuǎn)置和逆運算示例

    這篇文章主要介紹了python簡單實現(xiàn)矩陣的乘,加,轉(zhuǎn)置和逆運算,結(jié)合實例形式分析了Python針對矩陣的乘,加,轉(zhuǎn)置和求逆等運算相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • ChatGPT教你用Python實現(xiàn)BinarySearchTree詳解

    ChatGPT教你用Python實現(xiàn)BinarySearchTree詳解

    這篇文章主要為大家介紹了ChatGPT教你用Python實現(xiàn)BinarySearchTree詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Python requests模塊實例用法

    Python requests模塊實例用法

    在本篇文章中小編給大家分享了關(guān)于Python requests模塊實例用法,有需要的朋友們學(xué)習(xí)參考下。
    2019-02-02
  • Pycharm使用Conda激活環(huán)境失敗的問題解決

    Pycharm使用Conda激活環(huán)境失敗的問題解決

    本文主要介紹了Pycharm使用Conda激活環(huán)境失敗的問題解決,文中主要介紹了兩種問題的解決,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Python xmltodict模塊安裝及代碼實例

    Python xmltodict模塊安裝及代碼實例

    這篇文章主要介紹了Python xmltodict模塊安裝及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • python反轉(zhuǎn)(逆序)字符串的6種方法詳細

    python反轉(zhuǎn)(逆序)字符串的6種方法詳細

    這篇文章主要介紹了python反轉(zhuǎn)(逆序)字符串的6種方法詳細,需要的朋友可以參考下
    2021-04-04
  • python打包成 .so的實現(xiàn)步驟

    python打包成 .so的實現(xiàn)步驟

    當(dāng)需要將產(chǎn)品發(fā)布到外部環(huán)境的時候,源碼的保護尤為重要,因此需要將python文件打成so文件的目的就是為了保護源碼,本文主要介紹了python打包成.so的實現(xiàn)步驟,感興趣的可以了解一下
    2023-12-12
  • python爬取youtube視頻的示例代碼

    python爬取youtube視頻的示例代碼

    這篇文章主要介紹了python爬取youtube視頻的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • python對gif圖壓縮的完美解決方案

    python對gif圖壓縮的完美解決方案

    上圖圖片的時候由于圖片太大,導(dǎo)致上次不成功,因此需要對文件進行統(tǒng)一壓縮,這篇文章主要給大家介紹了關(guān)于python對gif圖壓縮的完美解決方案,需要的朋友可以參考下
    2021-11-11

最新評論