您的位置:首页 > 编程语言 > Python开发

python内置模块(loggin、os)

2017-11-13 06:23 579 查看
1、loggin模块

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

import loggin
logging.debug('this is debug')
logging.info('this is info message')
logging.warning('this is warning')
logging.error('this is error')
logging.critical('this is critical')


结果:

WARNING:root:this is warning
ERROR:root:this is error
CRITICAL:root:this is critical

Process finished with exit code 0


说明:

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

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

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

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

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

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

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

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

2)通过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/13 06:20:15 loggin.py[line:19] DEBUG This is debug message

2017/11/13 06:20:15 loggin.py[line:20] INFO This is info message

2017/11/13 06:20:15 loggin.py[line:21] WARNING This is warning message

说明:

主要是通过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

2、OS

os模块也是我们平时工作中很常用到的一个模块,通过os模块调用系统命令,获得路劲,获取操作系统的类型等都是使用该模块。

1) 通过os获取系统类型

import os
print(os.name)


如果是windows系统,os.name = ‘nt’

如果是linux系统os.name = ‘posix’

2) 执行系统命令

很多情况,我们通过python来代用系统命令,

import os
os.system(‘ipconfig’)
content=os.popen('ipconfig').read()
print(content)


解释:

该代码调用了windows系统的ipconfig命令,ipconfig是用来查看windows系统ip的。os.system(‘ifconfig’)只会调用系统的命令,但是当我们需要获得系统命令最后的执行结果的时候该怎么办呢?

这时候我们就用os.popen方法,os.popen()返回的是一个file对象,我们可以通过file.read()来获得最后系统命令最终的结果

3) 不同的操作系统是命令可能不一样。所以在使用系统命令之前,我们先要判断系统是linux系统还是windows系统

import os
#os.system(‘ifconfig’)只会调用系统的命令,是当我们需要获得系统命令最后的执行结果
os.system('ipconfig')
#os.popen()返回的是一个file对象,我们可以通过file.read()来获得最后系统命令最终的结果
content = os.popen('ipconfig').read()
print (content)

#找到这个ip的位置
print (content.find('192.168.0.109'))

#显示当前路径
print(os.getcwd())
#获取当前目录文件
print(os.listdir('.'))
#切换目录
os.chdir(r'f:')

#在当前目录下创建abc目录
#os.mkdir('abc')
#删除当前目录下的1.txt文件,(如果文件不存在会报错)
#os.remove('1.txt')
#打印操作系统的分隔符,linux系统的分隔符\n,windows系统的分隔符\r\n,
print(os.linesep)

#目录拼接但不会创建
print(os.path.join(os.getcwd(), 'abc.txt'))
#把最后文件和目录分开# ('F:', 'abc.txt')
path1 = os.path.join(os.getcwd(), 'abc.txt')
print(os.path.split(path1))
#把目录和后缀名分开
print (os.path.splitext(path1))
##当前目录下存在aaa目录,不创建,当前不存在aaa目录,创建aaa目录
if not os.path.exists(r'F:\abc\aaa'):
os.mkdir(r'F:\abc\aaa')
#获得E:\test\test.py文件的目录
print(os.path.dirname(r'E:\test\test.py'))


1, os.getcwd() 获得目录的当前系统程序工作路径

2, os. chdir(‘目标目录’) 切换到目标目录

3, os.listdir(‘字符串目录’) 列出字符串目录下的所有文件

4, os.mkdir(‘目录’) 创建目录

5, os.remove(‘1.txt’) 删除文件,文件不存在时会报错

6, os.linesep 打印操作系统的分隔符,linux系统的分隔符\n,windows系统的分隔符\r\n,mac系统的分隔符\r

7, os.path.join(os.getcwd(), ‘aaa’, ‘bbb’, ‘ccc’) 拼接出来多级目录:E:\test\aaa\bbb\ccc

8, os.path.exists(‘目录’) 判断目录是否存在

9, os.path.split(‘文件或者目录’) 把最后的一个目录或者文件和前面的目录分开,返回一个tuple

10,os.path.splitext(‘文件’) 把文件的后缀名和前面分开,返回一个tuple

os.fork()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: