subprocess & logging模块的介绍

1. subprocess

该模块替代了os.system & os.pawn*所实现的功能。

2. logging

1. 日志五大级别

    level              means               levelno
1. DEBUG 详细信息,调试时用 10
2. INFO 工作预期内容 20
3. WARNING(WARN) 警告,程序运行正常 30
4. ERROR 错误,程序部分功能不能实现 40
5. CRITICAL(FATAL) 致命错误,程序不能正常运行 50

2. 格式化

    格式                  表示
1. %(name)s Logger的名字(一般为root)
2. %(levelno)s 数字形式的日志级别
3. %(levelname)s 文本形式的日志级别
4. %(pathname)s 调用日志输出函数的模块的完整路径,带后缀
5. %(filename)s 调用日志输出函数的模块的文件名,带后缀
6. %(module)s 调用日志输出函数的模块名,不带后缀
7. %(funcName)s 调用日志输出的函数的函数名,可能没有,(需要使用函数调)
8. %(lineno)d 调用日志输出函数的语句所在的代码行
9. %(create)f 当前时间,用unix标准的时间的浮点数表示
10. %(relativeCreated)d 输出日志信息时,自Logger创建以来的毫秒
11. %(asctime)s 字符串形式的当前时间,默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
12. %(thread)d 线程ID
13. %(threadName)s 线程名
14. %(process)d 进程ID
15. %(message)s 用户输入的信息,该内容为级别后面用户输入的信息

3.时间格式

对于时间的字符串格式可以参考time模块的介绍,这里不做过多讲解。

4. 方法

  1. 创建日志文件

    方法:basicConfig(**kwargs)
    返回值:None
    #该方法接收字典类型的关键字参数。对于该方法的关键字参数主要有:filename,filemode,format,datefmt,style,level,stream,handlers。对于filemode关键字默认是'a'模块打开日志文件,如果指定是'r'模式将不能进行写入日志。
  2. 日志级别

    1. logging.debug(msg)#输出调试级别日志
    2. logging.info(msg)#输出工作级别日志
    3. logging.warning(msg)#输出警告级别日志
    4. logging.error(msg)#输出错误级别日志
    5. logging.critical(msg)#输出严重级别日志
  3. 常用方法

    1. logging.StreamHandler()#设置日志输出到屏幕
    2. logging.FileHandler(file)#设置日志输出到指定文件
    3. logging.getLogger(name=None)#创建一个Logger对象

5. logging中的常用类

  1. Logger

    提供了应用程序可以直接使用的接口

    1. logging.Logger.setLevel(level)#设置日志的最低级别
    2. logging.Logger.addFilter(filter)#增加指定的filter
    3. logging.Logger.removeFilter(filter)#删除指定的filter
    4. logging.Logger.addHandler(handler)#增加指定的handler
    5. logging.Logger.removeHandler(handler)#删除指定的handler
    6. logging.Logger.debug(msg)#输出调试级别日志
    7. logging.Logger.info(msg)#输出工作级别日志
    8. logging.Logger.warning(msg)#输出警告级别日志
    9. logging.Logger.error(msg)#输出错误级别日志
    10. logging.Logger.critical(msg)#输出严重级别日志
  2. Handler

    将(logger创建的)日志记录发送到合适的目的输出

    1. logging.Handler.setLevel(level)#指定被处理的最低日志级别
    2. logging.Handler.setFormatter(fmt)#指定被处理日志的格式
    3. logging.Handler.addFilter(filter)#增加一个filter对象
    4. logging.Handler.removeFilter(filter)#删除一个filter对象
    5. logging.handler.
  3. Filter

    提供了细度,设备来决定输出哪条日志记录

  4. Formatter

    决定了日志记录的最终输出格式

    方法与上述的格式类似,比format多了一个'%(msecs)d',表示创建时间的毫秒部分。

    常用三类的整合实例如下:

    logger = logging.getLogger('Test.log')#创建logger对象
    logger.setLevel(logging.DEBUG)#设置logger级别
    ch = logging.StreamHandler()#创建日志处理输出到屏幕的对象
    ch.setLevel(logging.DEBUG)#设置日志处理输出到屏幕输的日志级别
    fh = logging.FileHandler("test.log")#创建日志处理输出到文件的对象
    fh.setLevel(logging.WARNING)#设置日志处理输出到文件的日志级别
    formatter1 = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
    formatter2 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')#设置日志的格式
    ch.setFormatter(formatter1)#调用日志格式1到输出到屏幕对象中
    fh.setFormatter(formatter2)#调用日志格式2到输出到文件对象中
    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')

6. handlers子模块

该模块主要用于对于日志文件进行自动截断保存,主要分为按时间和大小进行截断。使用前需要先导入该模块,一般使用方法为:from logging import handlers

  1. handlers.RotatingFileHandler

    方法:handlers.RotatingFileHandler(filename[, mode[, maxBytes[, backupCount]]])
    参数:
    maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
    backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。

    实例如下:

    from logging import handlers
    logger = logging.getLogger(__name__)#创建logger对象
    log_file = "timelog.log"#声明一个文件名
    fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=5,backupCount=2)#日志文件按大小截断,每个文件最大5个字节,之保留2分日志文件,自动删除较早生成的日志文件。
    formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')
    fh.setFormatter(formatter)#调用格式到日志处理输出到文件
    logger.addHandler(fh)#增加一个日志处理输出到文件
    logger.warning("test1")
    logger.warning("test12")
    logger.warning("test13")
    logger.warning("test14")
  2. handlers.TimedRotatingFileHandler

    方法:handlers.TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
    参数:
    when表示时间,具体取值如下(不区分大小写):
    when == S 秒 interval取值为[1,59]
    M 分 [60,60*60)
    H 小时 [60*60,60*60*24)
    D 天 [60*60*24,∞)
    W 每星期 [60*60*24*1,60*60*24*7](interval==0时代表星期一)
    midnight 每天凌晨 不指定

实例如下:

    import time
from logging import handlers
logger = logging.getLogger(__name__)#创建logger对象
log_file = "timelog.log"#声明一个文件名
fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=2,backupCount=3)#每2秒生成一个日志文件,之保留3份日志文件。
formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')
fh.setFormatter(formatter)#调用格式到日志处理输出到文件
logger.addHandler(fh)#增加一个日志处理输出到文件
logger.warning("test1")
time.sleep(2)
logger.warning("test12")
time.sleep(2)
logger.warning("test13")
time.sleep(2)
logger.warning("test14")

Python中模块之logging & subprocess的讲解的更多相关文章

  1. Python中模块之hashlib&hmac的讲解

    hashlib & hmac的讲解 两个模块主要用于加密相关的操作. 1. hashlib模块 md5 具体代码如下 import hashlib ha_m5 = hashlib.md5()# ...

  2. Python中模块之os的功能介绍

    Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>> <module ...

  3. 查看python中模块的所有方法

    查看python中模块的所有方法     安装的python模块,现将查看方法总结如下 一.CMD命令行下使用pydoc命令 在命令行下运行$ pydoc modules即可查看 二.在python交 ...

  4. [python]关于在python中模块导入问题追加总结

    [背景] 最近在写程序时,我使用的eclipse编辑器运行都没有问题,然后部署到自动化环境上却偏偏报找不到相应模块问题,现在对该问题在之前的贴子上追加总结 原帖子:[python]关于python中模 ...

  5. [笔记]Python中模块互相调用的例子

    python中模块互相调用容易出错,经常是在本地路径下工作正常,切换到其他路径来调用,就各种模块找不到了. 解决方法是通过__file__定位当前文件的真实路径,再通过sys.path.append( ...

  6. 基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 下面小编就为大家分享一篇基于Python中numpy数组的合并实例讲解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python中n ...

  7. Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)

    一. logging(日志模块) 二 .re模块 三. 时间模块 四. random模块 五. os模块 六. sys模块 七. shutil模块 八. 序列化模块(json&pickle&a ...

  8. Python中模块

    模块 模块对我来说是什么 模块对我来说,感觉就像亲属或者朋友已经走过的路,他们已经趟过的浑水.掉过的坑.践行过的路线,全部提供给你,在你需要的时候请求帮助,借鉴他们的解决方法一样.都是为了方便走好人生 ...

  9. python中模块、包、库的区别和使用

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

随机推荐

  1. 有货前端 Web-APM 实践

    有货前端 Web-APM 实践 0 背景 有货电商技术架构上采用的是前后端分离,前端是主要以业务展示和接口聚合为主,拥有自己的 BFF (Backend For Frontend),以 nodejs ...

  2. js回顾(DOM中标签的CRUD,表格等)

    01-DOM中的创建和添加标签 02-删除替换克隆标签 03-全选全不选反选 04-新闻字体 05-表格增删 06-动态生成表格 07-表格隔行变色 08-左到右右到左(将左边的标签移动到右边) 09 ...

  3. eclipse+Maven插件报错:-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.

    问题描述: eclipse indigo+maven3.3.3+jdk1.70 maven插件执行报错:-Dmaven.multiModuleProjectDirectory system prope ...

  4. python爬虫——分析天猫iphonX的销售数据

    01.引言 这篇文章是我最近刚做的一个项目,会带领大家使用多种技术实现一个非常有趣的项目,该项目是关于苹果机(iphoneX)的销售数据分析,是网络爬虫和数据分析的综合应用项目.本项目会分别从天猫和京 ...

  5. (第一章)对程序员来说CPU是什么

    这几天,看到一本书,<程序是怎么跑起来的>,觉得之前都没有完整的看完一本书,现在要从这本书开始,慢慢的培养自己写读书笔记的习惯,不能度过去就忘了. 学习是一个螺旋上升的过程,不要指望一下子 ...

  6. uvalive 3602 DNA Consensus String

    https://vjudge.net/problem/UVALive-3602 题意: 给定m个长度均为n的DNA序列,求一个DNA序列,使得它到所有的DNA序列的汉明距离最短,若有多个解则输出字典序 ...

  7. POJ-2263 Heavy Cargo---最短路变形&&最小边的最大值

    题目链接: https://vjudge.net/problem/POJ-2263 题目大意: 有n个城市,m条连接两个城市的道路,每条道路有自己的最大复载量.现在问从城市a到城市b,车上的最大载重能 ...

  8. PHP多个一维数组合并成二维数组的简易方法

    当我们需要进行数组遍历数据的时候,需要将多个一维数组进行二维的转换,方法很简单.如下: <?php $a= array('张三','李四','王五'); $b= array ('23','24' ...

  9. .NET面试资料整理

    1.WCF和Web Api的区别答:1WCF是.NET平台开发的一站式框架,Web Api的设计和构建只考虑一件事情,那就是Http,而WCF的设计主要考虑是SOAP和WS-*:Web Api非常轻量 ...

  10. HBase表创建、删除、清空

    HBase shell窗口进入 执行命令hbase shell HBase表的创建 # 语法:create <table>, {NAME => <family>, VER ...