精华内容
下载资源
问答
  • 在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以Python引入了logging模块来记录我想要的...

    用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以Python引入了logging模块来记录我想要的信息。
    print也可以输入日志,logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些不需要的信息。

    1.日志级别

    import logging
    
    logging.debug(u"debug logging")
    logging.info(u"info logging")
    logging.warning(u"warning logging")
    logging.error(u"error logging")
    logging.critical(u"critical logging")
    

    在这里插入图片描述

    上面可以看到只有后面三个能打印出来

    默认生成的root logger的level是logging.WARNING,低于该级别的就不输出了

    级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

    • debug : 打印全部的日志,详细的信息,通常只出现在诊断问题上

    • info : 打印info,warning,error,critical级别的日志,确认一切按预期运行

    • warning : 打印warning,error,critical级别的日志,一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”),这个软件还能按预期工作

    • error : 打印error,critical级别的日志,更严重的问题,软件没能执行一些功能

    • critical : 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行

    这时候,如果需要显示低于WARNING级别的内容,可以引入NOTSET级别来显示:

    logging.basicConfig(level=logging.NOTSET)  # 设置日志级别
    logging.debug(u"如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")
    

    在这里插入图片描述
    2.部分名词解释

    Logging.Formatter:这个类配置了日志的格式,在里面自定义设置日期和时间,输出日志的时候将会按照设置的格式显示内容。
    Logging.Logger:Logger是Logging模块的主体,进行以下三项工作:

    1. 为程序提供记录日志的接口
    2. 判断日志所处级别,并判断是否要过滤
    3. 根据其日志级别将该条日志分发给不同handler
      常用函数有:
      Logger.setLevel() 设置日志级别
      Logger.addHandler()Logger.removeHandler() 添加和删除一个Handler
      Logger.addFilter() 添加一个Filter,过滤作用
      Logging.Handler:Handler基于日志级别对日志进行分发,如设置为WARNING级别的Handler只会处理WARNING及以上级别的日志。
      常用函数有:
      setLevel() 设置级别
      setFormatter() 设置Formatter

    3日志输出-控制台

    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  # logging.basicConfig函数对日志的输出格式及方式做相关配置
    # 由于日志基本配置中级别设置为DEBUG,所以一下打印信息将会全部显示在控制台上
    logging.info('this is a loggging info message')
    logging.debug('this is a loggging debug message')
    logging.warning('this is loggging a warning message')
    logging.error('this is an loggging error message')
    logging.critical('this is a loggging critical message')
    

    在这里插入图片描述

    上面代码通过logging.basicConfig函数进行配置了日志级别和日志内容输出格式;因为级别为DEBUG,所以会将DEBUG级别以上的信息都输出显示再控制台上。

    4.日志输出-文件

    import logging
    import os.path
    import time
    # 第一步,创建一个logger
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)  # Log等级总开关
    # 第二步,创建一个handler,用于写入日志文件
    rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
    log_path = os.path.dirname(os.getcwd()) + '/Logs/'
    log_name = log_path + rq + '.log'
    logfile = log_name
    fh = logging.FileHandler(logfile, mode='w')
    fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
    # 第三步,定义handler的输出格式
    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    fh.setFormatter(formatter)
    # 第四步,将logger添加到handler里面
    logger.addHandler(fh)
    # 日志
    logger.debug('this is a logger debug message')
    logger.info('this is a logger info message')
    logger.warning('this is a logger warning message')
    logger.error('this is a logger error message')
    logger.critical('this is a logger critical message')
    

    5.日志输出-控制台和文件

    只要在输入到日志中的第二步和第三步插入一个handler输出到控制台:
    创建一个handler,用于输出到控制台
    ch = logging.StreamHandler()
    ch.setLevel(logging.WARNING) # 输出到console的log等级的开关
    第四步和第五步分别加入以下代码即可
    ch.setFormatter(formatter)
    logger.addHandler(ch)

    6.format常用格式说明

    %(levelno)s: 打印日志级别的数值
    %(levelname)s: 打印日志级别名称
    %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    %(filename)s: 打印当前执行程序名
    %(funcName)s: 打印日志的当前函数
    %(lineno)d: 打印日志的当前行号
    %(asctime)s: 打印日志的时间
    %(thread)d: 打印线程ID
    %(threadName)s: 打印线程名称
    %(process)d: 打印进程ID
    %(message)s: 打印日志信息

    7.捕捉异常,用traceback记录

    import os.path
    import time
    import logging
    # 创建一个logger
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)  # Log等级总开关
    
    # 创建一个handler,用于写入日志文件
    rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
    log_path = os.path.dirname(os.getcwd()) + '/Logs/'
    log_name = log_path + rq + '.log'
    logfile = log_name
    fh = logging.FileHandler(logfile, mode='w')
    fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
    
    # 定义handler的输出格式
    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    # 使用logger.XX来记录错误,这里的"error"可以根据所需要的级别进行修改
    try:
        open('/path/to/does/not/exist', 'rb')
    except (SystemExit, KeyboardInterrupt):
        raise
    except Exception, e:
        logger.error('Failed to open file', exc_info=True)
    

    如果需要将日志不上报错误,仅记录,可以将exc_info=False

    8.多模块调用logging,日志输出顺序

    1.warning_output.py

    # -*-encoding:utf-8-*-
    import logging
    
    
    def write_warning():
        logging.warning(u"记录文件warning_output.py的日志")
    

    2.error_output.py

    # -*-encoding:utf-8-*-
    import logging
    
    
    def write_error():
        logging.error(u"记录文件error_output.py的日志")
    

    3.main.py

    # -*-encoding:utf-8-*-
    import logging
    import warning_output
    import error_output
    
    
    def write_critical():
        logging.critical(u"记录文件main.py的日志")
    
    
    warning_output.write_warning()  # 调用warning_output文件中write_warning方法
    write_critical()
    error_output.write_error()  # 调用error_output文件中write_error方法
    

    在这里插入图片描述
    日志的输出顺序和模块执行顺序是一致的。

    9.日志滚动和过期删除

    # coding:utf-8
    import logging
    import time
    import re
    from logging.handlers import TimedRotatingFileHandler
    from logging.handlers import RotatingFileHandler
    
    
    def backroll():
        #日志打印格式
        log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
        formatter = logging.Formatter(log_fmt)
        #创建TimedRotatingFileHandler对象
        log_file_handler = TimedRotatingFileHandler(filename="ds_update", when="M", interval=2, backupCount=2)
        #log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
        #log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
        log_file_handler.setFormatter(formatter)
        logging.basicConfig(level=logging.INFO)
        log = logging.getLogger()
        log.addHandler(log_file_handler)
        #循环打印日志
        log_content = "test log"
        count = 0
        while count < 30:
            log.error(log_content)
            time.sleep(20)
            count = count + 1
        log.removeHandler(log_file_handler)
    
    
    if __name__ == "__main__":
        backroll()
    

    filename:日志文件名的prefix;

    when:是一个字符串,用于描述滚动周期的基本单位,字符串的值及意义如下:
    “S”: Seconds
    “M”: Minutes
    “H”: Hours
    “D”: Days
    “W”: Week day (0=Monday)
    “midnight”: Roll over at midnight

    interval: 滚动周期,单位有when指定,比如:when=’D’,interval=1,表示每天产生一个日志文件

    backupCount: 表示日志文件的保留个数

    转自:https://www.cnblogs.com/CJOKER/p/8295272.html

    展开全文
  • 相关功能,可以参见datetime和calendat模块。此模块并非所有平台提供所有功能,因平台而异。以下是对一些术语和惯例的解释初始时间因平台而异。对于Unix平台,初始时间是1970,01,01,00:00:00(UTC)。查看每个操作...

    5d6f4f4686ed9302.jpg

    time模块

    time这个模块提供各种与时间相关的函数。相关功能,可以参见datetime和calendat模块。

    此模块并非所有平台提供所有功能,因平台而异。

    以下是对一些术语和惯例的解释

    初始时间因平台而异。对于Unix平台,初始时间是1970,01,01,00:00:00(UTC)。查看每个操作平台的初始时间可以使用time.gmtime(0)函数。

    在所有POSIX平台上,从初始时间以来的秒数都不包括闰秒

    该模块中的函数可能不处理初始时间以前和遥远未来的日期和时间,未来的分界点对于32位操作系统是2038年。

    UTC是协调世界时(以前称为格林尼治标准时间,GMT)。缩写UTC不是一个错误,而是英语和法语之间的妥协。

    DST是夏令时,在一年中的某些时候,时区通常会调整一个小时。DST规则是神奇的(由当地法律决定),每年都在变化。

    各种实时函数的精度可能低于表示其值或参数的单位所建议的精度。

    相关函数

    time.asctime([t])

    作用:将struct_time类型的时间转换为如下形式:'Sun Jun 20 23:21:05 1993'

    参数:struct_time类型或tuple类型的时间,不填参数的话默认为time.localtime()得到的时间。

    返回值:'Sun Jun 20 23:21:05 1993'类型的时间。

    time.pthread_getcpuclockid(thread_id)

    作用:返回指定线程id的线程特定CPU时间时钟的clk_id。

    参数:线程的id,可以使用threading.get_ident()或线程的ident属性得到线程id。

    返回值:clk_id

    注意:只有Unix可用

    time.clock_getres(clk_id)-->float

    作用:返回指定时钟clk_id的分辨率(精度)。有关clk_id的可接受值列表,请参考时钟ID常量。

    注意:只用Unix可用

    time.clock_gettime_ns(clk_id)-->int

    作用:与clock_gettime()类似,但是返回的时间是纳秒。

    注意:只用Unix可用

    time.clock_settime(clk_id,time:float)

    作用:设置指定时钟clk_id的时间。目前,CLOCK_REALTIME是clk_id惟一接受的值。

    注意:只用Unix可用

    time.clock_settime_ns(clk_id,time:int)

    作用:与clock_settime()类似,但是使用纳秒设置时间。

    注意:只用Unix可用

    time.ctime([secs])

    作用:将时间戳的时间转换为表示本地时间的字符串。如果没有提供secs或没有提供secs,则使用time()返回的当前时间。

    参数:时间戳类型的时间,如果不填默认为当前时间的时间戳。

    返回值:格式化类型的时间,例如'Mon Mar 18 23:56:35 2019'。

    time.get_clock_info(name)

    作用:以命名空间对象的形式获取指定时钟的信息。

    展开全文
  • print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其他数据,而logging则可以由开发者决定将信息输出到什么地方,以及怎么输出。 1. logging模块基本信息 1.1 日志等级 logging函数默认定.

    本文首发于:行者AI

    在开发项目时,我们不可能将所有的信息都打印在控制台中。我们可以使用Python标准库提供的logging API来处理。相比print,logging模块提供了许多强大而灵活的功能。比如:可以通过设置不同的日志等级,只输出重要信息,而不必显示大量的调式信息;print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其他数据,而logging则可以由开发者决定将信息输出到什么地方,以及怎么输出。

    1. logging模块基本信息

    1.1 日志等级

    logging函数默认定义了5个日志等级,它允许开发人员自定义日志等级,但是并不推荐。

    日志等级(level)) 描述
    DEBUG 最详细的日志信息,典型应用场景是 问题诊断
    INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
    WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
    ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
    CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息

    :日志等级从上到下依次升高 DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志信息依次减少;当指定一个日志级别之后,会记录大于或等于这个日志级别的日志信息,小于的将会被丢弃;默认打印的日志等级是 WARNING ,当日志等级设置为 WARNING 或之上时才被跟踪。

    1.2 日志字段信与格式

    一条日志信息对应的是一个事件的发生,而一个事件通常需要包括以下几个内容:

    • 事件发生时间
    • 事件发生位置
    • 事件的严重程度
    • 日志级别、事件内容等其他内容

    :输出一条日志时,日志内容和日志级别是需要开发人员明确指定的;对于而其它字段信息,只需要是否显示在日志中就可以了。

    2. logging模块的使用方式

    2.1 两种记录日志方式

    (1)使用logging提供的模块级别函数
    (2)使用logging日志系统的四大组件

    2.2 使用logging提供的模块级别函数详细说明

    (1)函数描述:

    函数 描述
    logging.debug(msg, args, *kwargs) 创建一条严重级别为DEBUG的日志记录
    logging.info(msg, args, *kwargs) 创建一条严重级别INFO的日志记录
    logging.warning(msg, args, *kwargs) 创建一条严重级别为WARNING的日志记录
    logging.error(msg, args, *kwargs) 创建一条严重级别为ERROR的日志记录
    logging.critical(msg, args, *kwargs) 创建一条严重级别为CRITICAL的日志记录
    logging.log(level, args, *kwargs) 创建一条严重级别为level的日志记录
    logging.basicConfig(**kwargs) 对root logger进行一次性配置

    :其中logging.basicConfig(**kwargs)函数用于指定“要记录的日志级别”、“日志格式”、 “日志输出位置”、“日志文件的打开模式”等信息,其他几个都是用于记录各个级别日志的函数。

    (2)实例:

    import logging
    def ex_logging():
        logging.debug("日志级别:DEBUG")
    	logging.info("日志级别:INFO")
    	logging.warning("日志级别:WARNING")
      	logging.error("日志级别:ERROR")
     	logging.critical("日志级别:CRITICAL")
    ex_logging()
    

    (3)实际结果:

    WARNING:root:日志级别:WARNING
    ERROR:root:日志级别:ERROR
    CRITICAL:root:日志级别:CRITICAL
    

    :默认打印的日志等级是 WARNING ,所以实际结果中只打印出了WARNING 或WARNING级别之上的日志。

    2.3 使用logging日志系统的四大组件

    组件描述:

    组件名称 类名 描述
    日志器 loggers 提供应用程序代码直接使用的接口
    处理器 handlers 用于将日志记录发送到指定的目的位置
    过滤器 filters 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其他的日志记录将会被忽略)
    格式器 formatters 用于控制日志信息的最终输出格式

    2.4 日志器 - Logger

    (1)Logger是一个树形层级结构,在使用接口debug、info、warning、error、critical之前必须创建Logger实例;

    (2)创建方式:

    logger = logging.getLogger(logger_name)
    

    (3)创建Logger实例后,可以使用以下方法进行日志级别设置,增加处理器Handler:

    logger.setLevel(logging.ERROR) # 设置日志级别为 ERROR,即只有日志级别大于等于 ERROR 的日志才会输出
    logger.addHandler(handler_name) # 为Logger实例增加一个处理器
    logger.removeHandler(handler_name) # 为 Logger 实例删除一个处理器
    

    2.5 处理器 - Handler

    (1)Handler 处理器类型有很多种,比较常用的有三个:StreamHandler、FileHandler、NullHandler。

    (2)创建方式:

    # StreamHandler创建方式
    sh = logging.StreamHandler(stream=None)
    # FileHandler创建方式
    # fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)
    # NullHandler:NullHandler类位于核心logging包,不做任何的格式化或者输出。本质上它是个“什么都不做”的handler,由库开发者使用。 
    

    (3)创建 StreamHandler 之后,可以通过使用以下方法设置日志级别,设置格式化器 Formatter,增加或删除过滤器 Filter。

    ch.setLevel(logging.WARN) # 指定日志级别,低于WARN级别的日志将被忽略
    ch.setFormatter(formatter_name) # 设置一个格式化器formatter
    ch.addFilter(filter_name) # 增加一个过滤器,可以增加多个
    ch.removeFilter(filter_name) # 删除一个过滤器
    

    2.6 过滤器 - filters

    (1)Filter过滤器基类,它只允许某个logger层级下的日志事件通过过滤。

    (2)一条日志信息被输出要经过以下几次过滤:日志器等级过滤、日志器的过滤器过滤、日志器的处理器等级过滤、日志器的处理器的过滤器过滤。

    (3)创建方式:

    filter = logging.Filter(name='')
    

    2.7 格式化器 - Formatter

    (1)使用Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。

    (2)创建方法:

    formatter = logging.Formatter(fmt=None, datefmt=None)
    # fmt是消息的格式化字符串,datefmt是日期字符串。如果不指明fmt,将使用'%(message)s'。如果不指明datefmt,将使用ISO8601日期格式。
    

    2.8 组件之间的关系

    (1)日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,不同的处理器(handler)可以将日志输出到不同的位置。

    (2)日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置。

    (3)每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志。

    (4)每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。

    总结以上内容:Logger 可以包含一个或多个 Handler 和 Filter,即:LoggerFilter,即:Logger 与 Handler 或 Fitler 是一对多的关系;一个 Logger 实例可以新增多个 Handler,一个 Handler 可以新增多个格式化器或多个过滤器,而且日志级别将会继承。

    3. 代码的实现与具体应用

    可以通过以下3种方法来配置logging:使用python代码创建loggers,handlers和formatters并分别调用它们的配置函数,创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容,创建一个包含配置信息的dict,然后把它传递给dictConfig()函数;

    3.1 使用python代码实现日志配置

    (1)Python代码展示:

    import logging
    import sys
    # 创建日志器logger并将其日志级别设置为DEBUG
    logger = logging.getLogger("python_config_logger")
    logger.setLevel(logging.DEBUG)
    # 创建一个流处理器handler并将其日志级别设置为DEBUG
    handler = logging.StreamHandler(sys.stdout)
    handler.setLevel(logging.DEBUG)
    # 创建一个格式化器formatter并将其添加到处理器handler中
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    # 为日志器logger添加上面创建好的处理器handler
    logger.addHandler(handler)
    # 将日志打印在控制台
    logger.debug('打印日志级别:debug')
    logger.info('打印日志级别:info')
    logger.warning('打印日志级别:warning')
    logger.error('打印日志级别:error')
    logger.critical('打印日志级别:critical') 
    

    (2)实际结果:

    2021-02-24 17:13:44,644 - python_config_logger - DEBUG - 打印日志级别:debug
    2021-02-24 17:13:44,644 - python_config_logger - INFO - 打印日志级别:info
    2021-02-24 17:13:44,644 - python_config_logger - WARNING - 打印日志级别:warning
    2021-02-24 17:13:44,645 - python_config_logger - ERROR - 打印日志级别:error
    2021-02-24 17:13:44,645 - python_config_logger - CRITICAL - 打印日志级别:critical
    

    3.2 使用配置文件和fileConfig()函数实现日志配置

    (1)Python代码展示:

    import logging.config
    # 读取日志配置文件内容
    logging.config.fileConfig('logging.conf')
    # 创建一个日志器logger
    logger = logging.getLogger('simpleExample')
    # 将日志打印在控制台
    logger.debug('打印日志级别:debug')
    logger.info('打印日志级别:info')
    logger.warning('打印日志级别:warning')
    logger.error('打印日志级别:error')
    logger.critical('打印日志级别:critical')
    

    (2)logging.conf配置文件内容:

    [loggers]
    keys=root,simpleExample
    # 测试
    [handlers]
    keys=fileHandler,consoleHandler
    [formatters]
    keys=simpleFormatter
    [logger_root]
    level=DEBUG
    handlers=fileHandler
    [logger_simpleExample]
    level=DEBUG
    handlers=consoleHandler
    qualname=simpleExample
    propagate=0
    [handler_consoleHandler]
    class=StreamHandler
    args=(sys.stdout,)
    level=DEBUG
    formatter=simpleFormatter
    [handler_fileHandler]
    class=FileHandler
    args=('logging.log', 'a')
    level=ERROR
    formatter=simpleFormatter
    [formatter_simpleFormatter]
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
    datefmt=
    

    (3)实际结果:

    2021-02-25 15:04:50,644 - simpleExample - DEBUG - 打印日志级别:debug
    2021-02-25 15:04:50,646 - simpleExample - INFO - 打印日志级别:info
    2021-02-25 15:04:50,646 - simpleExample - WARNING - 打印日志级别:warning
    2021-02-25 15:04:50,646 - simpleExample - ERROR - 打印日志级别:error
    2021-02-25 15:04:50,646 - simpleExample - CRITICAL - 打印日志级别:critical
    

    3.3 使用dict配置信息和dictConfig()函数实现日志配置

    (1)Python代码展示:

    import logging.config
    import logging
    import yaml
    
    # 读取日志配置文件内容
    with open('logging.yml', 'r') as file_logging:
        dict_conf = yaml.load(file_logging, Loader=yaml.FullLoader)
    logging.config.dictConfig(dict_conf)
    # 创建一个日志器logger
    logger = logging.getLogger('simpleExample')
    # 将日志打印在控制台
    logger.debug('打印日志级别:debug')
    logger.info('打印日志级别:info')
    logger.warning('打印日志级别:warning')
    logger.error('打印日志级别:error')
    logger.critical('打印日志级别:critical')  
    

    (2)logging.yml配置文件内容:

    version: 1
    formatters:
      simple:
        format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    handlers:
      console:
        class: logging.StreamHandler
        level: DEBUG
        formatter: simple
    loggers:
      simpleExample:
        level: DEBUG
        handlers: [console]
        propagate: no
    root:
      level: DEBUG
      handlers: [console]
    
    

    (3)实际结果:

    2021-02-25 15:14:28,822 - simpleExample - DEBUG - 打印日志级别:debug
    2021-02-25 15:14:28,822 - simpleExample - INFO - 打印日志级别:info
    2021-02-25 15:14:28,822 - simpleExample - WARNING - 打印日志级别:warning
    2021-02-25 15:14:28,822 - simpleExample - ERROR - 打印日志级别:error
    2021-02-25 15:14:28,823 - simpleExample - CRITICAL - 打印日志级别:critical
    
    

    4. 总结

    本文只是简单的介绍了python中logging模块的基本使用方法,后期还有许多优化的地方,希望和大家一起来探讨。


    PS:更多技术干货,快关注【公众号 | xingzhe_ai】,与行者一起讨论吧!

    展开全文
  • .dir()查看对象有什么,help()查看怎么Python有众多内置函数,记不住有什么,记不住功能.It’s easy to solve dir() 带参数时,返回参数的属性、方法列表 help()函数查看函数或模块用途的详细说明 因此先...

    python中查看对象的属性和方法以及如何使用

    .dir()查看对象有什么,help()查看怎么用


    Python有众多内置函数,记不住有什么,记不住功能.It’s easy to solve

    dir() 带参数时,返回参数的属性、方法列表
    help()函数查看函数或模块用途的详细说明

    因此先查看有什么再查看如何用

    例子

    D = [A,B,C]
    #print(D)
    dir(D)#等价与dir([ ])
    help(D.pop)
    

    dir(D)或者dir([ ])将返回如下列表

    [‘add’,
    class’,
    contains’,
    delattr’,
    delitem’,
    dir’,
    doc’,
    eq’,
    format’,
    ge’,
    getattribute’,
    getitem’,
    gt’,
    hash’,
    iadd’,
    imul’,
    init’,
    init_subclass’,
    iter’,
    le’,
    len’,
    lt’,
    mul’,
    ne’,
    new’,
    reduce’,
    reduce_ex’,
    repr’,
    reversed’,
    rmul’,
    setattr’,
    setitem’,
    sizeof’,
    str’,
    subclasshook’,
    ‘append’,
    ‘clear’,
    ‘copy’,
    ‘count’,
    ‘extend’,
    ‘index’,
    ‘insert’,
    ‘pop’,
    ‘remove’,
    ‘reverse’,
    ‘sort’]

    其中有列表方法pop,使用help(D.pop)得到使用帮助

    Help on built-in function pop:
    pop(index=-1, /) method of builtins.list instance
    Remove and return item at index (default last).
    Raises IndexError if list is empty or index is out of range.

    展开全文
  • 前记python删除指定文件夹下的文件,是一个常用的功能。我找了不少地方,一直没有找到合适的模版,那只好自己倒腾一个比较实用的模版了。基本模块这里面会用到几个模块,一个是�目录下所有文件的的函数:listdir ...
  • 怎么实现这个功能,所以要到包所在位置查看。 有时候也需要查看包的版本信息。 1 查看 包所在位置 and 版本信息 #查看re 模块位置和版本信息 pydoc re 2 进入python 交互环境 输入: help(re) 显示...
  • os模块提供了一些便捷功能来使用操作系统资源,比如读取资源目录下的文件、在命令行查看某路径下文件的所有内容等。 获取系统类型 对代码进行兼容性开发以适应不同操作系统时通过操作系统类型进行判断就可以轻松...
  • 最近尝试学习一下python语言(不要问为什么选择python,我也不知道),那么提起来学习,怎么能想我写c语言一样,通过 man page 一样查看函数说明,相信python也同样也有这样功能。    python 就提供了两个函数,...
  • 比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_user)模块, 然后又加入了一个删除客户的功能(del_user)模块,然后又加入了一个修改客户的功能(up_user)...
  • 顺便问下,Python怎么没有像JAVA那样的完整详细的API? <strong>问题补充</strong><br/><div class="quote_title">zwws 写道</div><div class="quote_div">Python标准库的源码就在<python>/Lib下。 ...
  • 但是怎么样能在python里面来使用linux的命令呢? 在这里我使用subprocess模块。 其中最基本的是call函数。但是由于我们要实现的是更高级的功能,所以就不详细说这个了。具体的内容查看文档可知。使用这个函数有点...
  • 查看了新浪SAE的开发者文档,对于定时任务的概述,它是这样写的: “定时任务服务可以用来定期触发您的应用执行一些后台任务,像定期清理和备份 MySQL 表中的数据、发送邮件通知等。定时任务的执行以 HTTP 方式...
  • 查看安装了哪些模块可以在命令行输入pip list获取(要先配置python的环境变量)。下面以getpass为例查看其源代码。(推荐学习:Python视频教程)1.help(getpass)输入该命令找到file路径,并且可以查看其其提供的功能。2....
  • 大部分项目包含很多文件模块和第三方依赖,它们通过特定的语法被引用和导入(如 include, require, import 等),而依赖关系可能被罗列在项目的 manifest 文件中(如 package.json, ...
  • 权限受限,只能查看模块的相关数据,不能操作。如果要体验全部功能,请在自己的系统安装simpleui查看效果。 地址:https://www.88cto.com/admin/ 用户名:demo 密码:demo123456 Docker docker pull newpanjing...
  • 8、快速测试界面,类似于postman的功能,后续怎么json格式显示的样式 9、新增接口分组,用于按模块对接口进行分类,更好的管理接口 10、新增API,用户可新增的API,目前只支持源数据格式和form-data格式 11、接口...
  • 功能插件、语音识别、语音合成、对话机器人都做到了高度模块化,第三方插件单独维护,方便继承和开发自己的插件。 中文支持。集成百度、科大讯飞、阿里、腾讯等多家中文语音识别和语音合成技术,且可以继续扩展。 ...
  • 通过pip安装 scrapy , requests , bs4 , pymysql 等模块 目录结构描述 ├── beautiSoupSpider // bs4爬虫 ├── scrapySpider // scrapy爬虫 ├── newSpider // 使用requests完成的其它功能 └── ...
  • 功能测试:(Function testing中国 Feature testing国际) 118 性能测试:(Sercarity testing) 118 安全性测试:(Security Testing) 118 安装测试 119 GUI测试(Graphical user interface) 120 可用性测试...
  • 2、安装Python模块PIL(请自行百度,可能道路比较坎坷) 3、验证码打码:我使用的是 http://www.yundama.com/ (真的不是打广告..),将username、password、appkey填入yumdama.py(正确率挺高,weibo.cn正常的...
  • 这是因为服务器端授权问题、内核问题或是手机端的配置问题造成的,请看内核是否为248K的内核,并检查网络模块是否为34.7K的网络模块,如果没有问题请检查手机端相应位置的配置信息。配置一定要细心做好。如果还不行...
  • xssfork作为sicklescan的一个功能模块,其开发主要目的是用于检测xss漏洞。 传统的xss探测工具,一般都是采用 payload in response的方式,即在发送一次带有payload的http请求后,通过检测响应包中payload的完整性来...
  • 脑图持续不断更新中,在线查看地址 后续文章和内容会不断更新到 github项目 中,欢迎关注。 目录(善用Ctrl+F) 基础入门 新手 Golang开发新手常犯的50个错误 数据类型 连nil切片和空切片一不一样都不清楚...
  • 1.2.8 对大数据平台中的元数据管理是怎么理解的,元数据收集管理体系是怎么样的,会对大数据应用有什么样的影响 1.2.9 你理解常见如阿里,和友商大数据平台的技术体系差异以及发展趋势和技术瓶颈,在存储和计算两...
  • Java中一个逐渐被遗忘的强大功能,强到你难以置信!! 图解计算机中数据的表示形式 图解计算机中的数值范围和浮点数运算 图解计算机结构与体系分类!! Http Header中到底有些啥? 计算机中的流水线技术到底是个啥?...
  • macOS 自带了 apache、python、ruby 等一些列开发工具),而是使用 Homebrew 的 Apache。当然,系统自带的 Apaceh 也是可以工作的。 在 macOs 上进行 Web 开发,确实是一件很令人愉快的事情...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

python怎么查看模块功能

python 订阅