Python的logging模块os模块commands模块与sys模块
Posted huangdongju
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的logging模块os模块commands模块与sys模块相关的知识,希望对你有一定的参考价值。
一、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
默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。
● DEBUG:详细的信息,通常只出现在诊断问题上。
● INFO:确认一切按预期运行
● WARNING:一个警告,可能会有一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作
● ERROR:个更严重的问题,软件没能执行一些功能
● CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行
默认logging默认的日志级别是info
通常情况下是将日志写入文件中,实例如下:
import logging logging.basicConfig(level=__debug__,format=\'%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s\',datefmt=\' %Y/%m/%d %H:%M:%S\', filename=\'momo.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\') logging.error(\'this is error message\') logging.critical(\'this is critical 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__。
二、os模块
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: (\'.\')
os.makedirs(\'dirname1/dirname2\') 可生成多层递归目录
os.removedirs(\'dirname1\') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(\'dirname\') 生成单级目录;相当于shell中mkdir dirname
os.rmdir(\'dirname\') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(\'dirname\') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat(\'path/filename\') 获取文件/目录信息
os.symlink(\'path/filename\',\'ln_filename\') 创建符号链接,源需绝对路径
os.utime() 修改时间属性
1.通过os获取系统类型
import os print (os.name)
结果:linux系统os.name是posix,windows系统的os.name是nt
2.执行系统命令
context = os.popen(\'ipconfig\').read()print (context.find(\'192.168.56.1\'))
结果:328
3.文件和目录的操作
print(os.listdir(\'.\')) print (os.getcwd()) print (os.listdir(os.getcwd())) os.chdir(r\'F:\\momo\') print (os.getcwd()) os.mkdir(\'test\') os.remove(\'momo.log\') print (os.linesep) if not os.path.exists(\'test\'): os.mkdir(\'test\') else: print (\'test is ok!\') a = os.path.join(\'.\',\'aaa\',\'bbb\',\'ccc\') print (a) print (os.path.dirname(r\'F:\\test\\test.py\'))
三、commands模块
调用系统命令command模块提供了三种方法:cmd代表系统命令
1.commands.getoutput(cmd)
只返回执行shell命令的结果:
举个例子:
[root@localhost ~]# cat a.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import commands
cmd = \'ls /home/admin\'
a = commands.getoutput(cmd)
print(type(a))
print(a)
结果:
[root@localhost ~]# python a.py
<type \'str\'>
nginx.conf
nginx_upstream_check_module-master.zip
test.py
commands是提供linux系统环境下支持使用shell命令的一个模块,在企业中,我们很多的脚本和环境都是在linux系统中跑起来的,
2. commands.getstatusoutput(cmd)
在上面我们在执行shell命令的时候,我们的shell命令可能执行报错,或者异常退出,我们就要有一个条件来判断shell最终执行的结果是什么,commands.getstatusoutput(cmd)的返回结果有两个值,
[root@localhost ~]# cat c.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import commands
cmd = \'ls /home/admin\'
c = commands.getstatusoutput(cmd)
print(type(c))
status, output = commands.getstatusoutput(cmd)
print(status)
print(output)
print(type(output))
结果:
[root@localhost ~]# python c.py
<type \'tuple\'>
0
nginx.conf
nginx_upstream_check_module-master.zip
test.py
<type \'str\'>
解释:
Commands.getstatusoutput(cmd)的返回结果是一个tuple,第一个值是shell执行的结果,如果shell执行成功,返回0,否则,为非0,第二个是一个字符串,就是我们shell命令的执行结果,python通过一一对应的方式复制给status和output,这个就是python语言的巧妙之处。
四、sys模块
sys模块提供了一系列有关Python运行环境的变量和函数。
1.sys.argv:可以用sys.argv获取当前正在执行的命令行参数的参数列表(list)。
import sys if __name__ == \'__main__\': print (\'sys.argv[0] = {0}\'.format(sys.argv[0])) print (\'sys.argv[1] = {0}\'.format(sys.argv[1])) print (\'sys.argv[2] = {0}\'.format(sys.argv[2]))
2. sys.stdin\\stdout\\stderr
功能:stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们。实例如下:
import sys if __name__ == \'__main__\': print (\'####################\') sys.stdout.write(\'hello huangdongju\') print (\'hello world\') name = raw_input(\'Please input your name:\') print (\'hello \' + name) address = sys.stdin.readline() print (address) f = open(\'1.log\',\'w\') sys.stdout = f print (\'aaaaaaaaa\') print (\'hello world\')
3. 捕获sys.exit(n)调用
功能:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常).实例如下:
import sys def hello(): print (\'hello\') if __name__ == \'__main__\': sys.exitfunc = hello print (\'start\') sys.exit(1) print (\'end\')
以上是关于Python的logging模块os模块commands模块与sys模块的主要内容,如果未能解决你的问题,请参考以下文章
python学习-常用模块-os,random,logging