本文讨论
参数解析
python解析参数的一般方法如下:
import argparse
# 1.创建解析器
parser = argparse.ArgumentParser()
# 2.增加解析选项
parser.add_argument('--port', type=int,
help="server's port",
default=8090)
parser.add_argument('user', type=str,
help="server's user", default='user')
# 3.解析参数
args = parser.parse_args()
# 4.使用解析结果
print('port={}, user={}'.format(args.port, args.user))
–开头的参数是可选参数(可输入可不输入),如果没有传入则使用默认值。代码中没有默认值则为None。
没有–开头的参数是必选值
假设上述代码文件名为argument.py,下面3中使用方法等效:
python argument.py --port=8080 happy
#or
python argument.py --port 8080 happy
#or
python argument.py happy
输出为:
port=8080, user=happy
如果这样使用:
python argument.py
则会有出错提示:
usage: argument.py [-h] [--port PORT] user
argument.py: error: the following arguments are required: user
日志记录
简单使用日志的方法如下:
import logging
from logging.handlers import RotatingFileHandler
# 1.日志目录
LOG_PATH = os.path.join(ROOT_PATH, "logs/log.txt")
# 2.获取回滚日志操作句柄,设置日志文件大小为50M,超过以后自动覆盖。最多备份5个日志文件
rthandler = RotatingFileHandler(LOG_PATH, maxBytes=50 * 1024 * 1024, backupCount=5)
# 3.设置日志格式
formatter = logging.Formatter('%(asctime)s [%(levelname)s] [%(filename)s:%(lineno)d] %(message)s')
rthandler.setFormatter(formatter)
# 4.获取日志实例,将配置写入生效
logger = logging.getLogger('')
logger.addHandler(rthandler)
# 5.设置记录的最小日志登记
logger.setLevel(logging.ERROR)
上述设置只要设置一次,同一python进程使用logging.getLogger(”)获取并使用都有效。
python等级在代码中定义如下(数字越小越不重要):
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
后续使用方法如下:
logger = logging.getLogger('')
logger.debug("something happned")
从网上找到一个稍微复杂的例子,这样就可以避免print满天飞了:
# -*- coding: utf-8 -*-
import logging
import sys
# 获取logger实例,如果参数为空则返回root logger
logger = logging.getLogger("AppName")
# 指定logger输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
# 文件日志
file_handler = logging.FileHandler("test.log")
file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式
# 控制台日志
console_handler = logging.StreamHandler(sys.stdout)
console_handler.formatter = formatter # 也可以直接给formatter赋值
# 为logger添加的日志处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 指定日志的最低输出级别,默认为WARN级别
logger.setLevel(logging.INFO)
# 输出不同级别的log
logger.debug('this is debug info')
logger.info('this is information')
logger.warn('this is warning message')
logger.error('this is error message')
logger.fatal('this is fatal message, it is same as logger.critical')
logger.critical('this is critical message')
# 2016-10-08 21:59:19,493 INFO : this is information
# 2016-10-08 21:59:19,493 WARNING : this is warning message
# 2016-10-08 21:59:19,493 ERROR : this is error message
# 2016-10-08 21:59:19,493 CRITICAL: this is fatal message, it is same as logger.critical
# 2016-10-08 21:59:19,493 CRITICAL: this is critical message
# 移除一些日志处理器
logger.removeHandler(file_handler)
上述代码地址在:http://python.jobbole.com/86887/