一、logging模块

  1. import logging
  2.  
  3. logging.debug('This is debug message')
  4. logging.info('This is info message')
  5. logging.warning('This is warning message')
  6.  
  7. 屏幕上打印:
  8. WARNING:root:This is warning message

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

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

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

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

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

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

  默认logging默认的日志级别是info

  通常情况下是将日志写入文件中,实例如下:

  1. import logging
  2. 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')
  3. logger = logging.getLogger(__name__)
  4. logging.debug('this is debug message')
  5. logging.info('this is info message')
  6. logging.warning('this is warning message')
  7. logging.error('this is error message')
  8. 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') 可生成多层递归目录

  1.  os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
  1. os.mkdir('dirname') 生成单级目录;相当于shellmkdir dirname
  1. os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shellrmdir dirname
  1. os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
  1. os.remove() 删除一个文件
  1. os.rename("oldname","newname") 重命名文件/目录
  1. os.stat('path/filename') 获取文件/目录信息
  1. os.symlink('path/filename','ln_filename') 创建符号链接,源需绝对路径
  1. os.utime() 修改时间属性

  1.通过os获取系统类型

  1. import os
  2. print (os.name)

  结果:linux系统os.name是posix,windows系统的os.name是nt

  2.执行系统命令

  1. context = os.popen('ipconfig').read()print (context.find('192.168.56.1'))

  结果:328

  3.文件和目录的操作

  1. print(os.listdir('.'))
  2. print (os.getcwd())
  3. print (os.listdir(os.getcwd()))
  4.  
  5. os.chdir(r'F:\momo')
  6. print (os.getcwd())
  7. os.mkdir('test')
  8. os.remove('momo.log')
  9. print (os.linesep)
  10.  
  11. if not os.path.exists('test'):
  12. os.mkdir('test')
  13. else:
  14. print ('test is ok!')
  15.  
  16. a = os.path.join('.','aaa','bbb','ccc')
  17. print (a)
  18.  
  19. 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)。

  1. import sys
  2. if __name__ == '__main__':
  3. print ('sys.argv[0] = {0}'.format(sys.argv[0]))
  4. print ('sys.argv[1] = {0}'.format(sys.argv[1]))
  5. print ('sys.argv[2] = {0}'.format(sys.argv[2]))

2.  sys.stdin\stdout\stderr

功能:stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们。实例如下:

  1. import sys
  2. if __name__ == '__main__':
  3. print ('####################')
  4. sys.stdout.write('hello huangdongju')
  5. print ('hello world')
  6.  
  7. name = raw_input('Please input your name:')
  8. print ('hello ' + name)
  9. address = sys.stdin.readline()
  10. print (address)
  11.  
  12. f = open('1.log','w')
  13. sys.stdout = f
  14. print ('aaaaaaaaa')
  15. print ('hello world')

3. 捕获sys.exit(n)调用

功能:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常).实例如下:

  1. import sys
  2. def hello():
  3. print ('hello')
  4. if __name__ == '__main__':
  5. sys.exitfunc = hello
  6. print ('start')
  7. sys.exit(1)
  8. print ('end')

Python的logging模块、os模块、commands模块与sys模块的更多相关文章

  1. 洗礼灵魂,修炼python(17)--跨平台操作三剑客—os,os.path.sys模块

    os 1.作用: 因为客户基本都是使用不同的操作系统,在不同的系统下,要完成一个项目,那必须跨平台操作,而python本来就是一个跨平台的语言,而有了os模块,则不需要在意什么系统.并且os模块是用于 ...

  2. Python基础之模块:3、os模块 sys模块 json模块 json实战

    目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...

  3. 【python标准库模块三】Os模块和Sys模块学习

    Os模块 导入os模块 import os 获取当前工作目录 os.getcwd() 切换目录,跟linux中的cd一样 os.chdir("文件夹名") 递归生成文件夹 os.m ...

  4. Day 4-3 os & sys模块

    常用方法: import os os.getcwd() # 获取当前程序的工作路径(python解释器的运行路径,不是脚本所在的路径.) os.listdir() # 获取当前程序根目录下的所有文件夹 ...

  5. 巨蟒python全栈开发-第23天 内置常用模块2

    一.今日主要内容 1.nametuple:(命名元组,本质还是元组) 命名元组=>类似创建了一个类 结构化时间其实是个命名元组 2.os 主要是针对操作系统的 一般用来操作文件系统 os.mak ...

  6. python3 json、logging、sys模块

    json模块 import json dic = {'name':'egon','age':32} # ------------------------------>序列化 f = open(' ...

  7. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  8. day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime

    os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...

  9. Python之logging模块

    一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...

随机推荐

  1. 【转载】#457 Converting Between enums and their Underlying Type

    When you declare an enum, by default each enumerated value is represented internally with an int. (S ...

  2. IOS 触摸事件的处理

    触摸事件的处理1.判断触摸点在谁身上: 调用所有UI控件的- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 2.pointIn ...

  3. Android(java)学习笔记56:Android InputMethodManager输入法简介

    参见博客: http://blog.csdn.net/pi9nc/article/details/9196779

  4. Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说

    版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...

  5. nginx安装和基础代理配置

    mac上执行 npm install nginx 安装好后运行nginx sudo nginx 一般mac下nginx会安装在 /usr/local/etc/nginx 下 里面的nginx.conf ...

  6. 2017.9.12 初入HTML -----学习总结(二)

    接上:..... (4)标记可分为: 4.1单标记:(单标记仅单独使用就可以表达完整的意思) 基本语法:<标记名称/> 例如:<br/>实现换行的功能.<hr/>实 ...

  7. XCode项目配置可访问 非 https 接口的方法

    打开项目的info.plist文件,右键- open as sourceCode .在代码中添加: <key>NSAppTransportSecurity</key> < ...

  8. Redis的安装+哨兵模式+集群

    Redis安装(基于2.8版本) 哨兵(Sentinel集群)模式: 集群(基于3.0+)

  9. java实现简单计算器功能

    童鞋们,是不是有使用计算器的时候,还要进入运行,输入calc,太麻烦了,有时候甚至还忘记单词怎么拼写,呵呵程序员自己写代码实现,又简单,又方便啊 以下为代码(想要生成可执行工具可参考:http://w ...

  10. .net mvc里AutoMapper更为便捷的使用方法

    前言:AutoMapper的下载安装我就不多说了,网上百度一大堆.今天我就说说它的更为简单的使用,什么叫更为简单呢?按照一般的使用方法,我们首先建DTO,然后建每个对应的Profile,然后还要把每个 ...