python参数解析和日志记录

本文讨论

参数解析

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/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值