zoukankan      html  css  js  c++  java
  • 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:	est	est.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.stdinstdoutstderr

    功能: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')
  • 相关阅读:
    51keil编译器printf函数
    asp.net里登陆记住密码
    Asp.net GridView分页
    DataTable拆分分页
    ASP.NET MVC 窗体身份验证及角色权限治理示例
    asp.net获取IP地址
    Asp.net Ajax框架教程
    将页面的ViewState放在Session
    20个Jquery表单插件
    前端下载图片的N种方法
  • 原文地址:https://www.cnblogs.com/huangdongju/p/7816761.html
Copyright © 2011-2022 走看看