学习笔记(11月10日)--python常用内置模块的使用(logging, os, command)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记(11月10日)--python常用内置模块的使用(logging, os, command)相关的知识,希望对你有一定的参考价值。

四周五次课(11月10日)


一、 logging

日志是我们排查问题的关键利器,写好日志记录,当我们发生问题时,可以快速定位代码范围进行修改。Python给我们开发者们提供了好的日志模块,下面我们就来介绍一下logging模块:

首先,我们先来看一个例子:

import logging
logging.debug(‘This is debug message‘)
logging.info(‘This is info message‘)
logging.warning(‘This is warning message‘)

结果:

WARNING:root:This is warning message

解释:我们写了三句话,但是在屏幕上只打印了一个warning级别的日志,这个是怎么回事呢?

默认情况下,logging将日志打印到屏幕,日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。

  ● DEBUG:详细的信息,通常只出现在诊断问题上。

  ● INFO:确认一切按预期运行

  ● WARNING:一个警告,可能会有一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作

  ● ERROR:一个更严重的问题,软件没能执行一些功能

  ● CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行

而logging默认的日志级别是warning,一般基本上所有的程序都是这个级别,有助于我们排查问题,但是当发生问题,我们没法定位到问题,很多情况下我们需要把日志级别提升到debug级别,那又怎么办呢?


      通过logging.basicConfig函数对日志的输出格式及方式做相关配置

现实工作中,往往我们是要把日志写在日志文件中的,那怎么做呢?看如下代码:

import logging
logging.basicConfig(level=logging.DEBUG, format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,datefmt=‘ %Y/%m/%d %H:%M:%S‘, filename=‘myapp.log‘, filemode=‘w‘)
logger = logging.getLogger(__name__)
logging.debug(‘This is debug message‘)
logging.info(‘This is info message‘)
logging.warning(‘This is warning message‘)

结果:

在当前文件夹中新增了一个myapp.log文件,文件的内容如下:

2017/11/10 14:21:03 20171101.py[line:10] DEBUG This is debug message
2017/11/10 14:21:03 20171101.py[line:11] INFO This is info message
2017/11/10 14:21:03 20171101.py[line:12] WARNING This is warning message

解释:

主要是通过logging.basicConfig函数进行操作。


logging.basicConfig函数参数的用法:

level: 设置日志级别,默认为logging.WARNING

filename: 指定日志文件名。

filemode: 和file函数意义相同,指定日志文件的打开模式,‘w‘或‘a‘

format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:

%(levelname)s: 打印日志级别名称

%(filename)s: 打印当前执行程序名

%(funcName)s: 打印日志的当前函数

%(lineno)d:   打印日志的当前行号

%(asctime)s:  打印日志的时间

%(thread)d:   打印线程ID

%(process)d:  打印进程ID

%(message)s:  打印日志信息

datefmt: 指定时间格式,同time.strftime()

stream: 指定日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

logging.getLogger([name]):创建一个日志对象:

返回一个logger实例,如果没有指定name,返回root logger。只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例。

logging.getLogger(__name__) 在上述实例中__name__就指的是__main__。


二、 os模块


三、 command模块


四、 sys模块


以上是关于学习笔记(11月10日)--python常用内置模块的使用(logging, os, command)的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记(11月14日)--正则

学习笔记(10月19日) --python运算符

学习笔记(10月18日) --pycharm基本使用方法

Python学习笔记五:字符串常用操作,字典,三级菜单实例

学习笔记(10月25日)--python的ifwhilefor语法

学习笔记(10月16日)