use*_*146 58 python python-2.7
我想添加一个调试print语句测试,如果我--verbose
从命令行启用,如果我在脚本中有以下内容.
logger.info("test")
Run Code Online (Sandbox Code Playgroud)
我经历了以下问题,但无法得到答案......
Mat*_*ang 104
我发现--verbose
(对于用户而言)和--debug
(对于开发人员)都很有用.以下是我如何使用logging
和argparse
:
import argparse
import logging
parser = argparse.ArgumentParser()
parser.add_argument(
'-d', '--debug',
help="Print lots of debugging statements",
action="store_const", dest="loglevel", const=logging.DEBUG,
default=logging.WARNING,
)
parser.add_argument(
'-v', '--verbose',
help="Be verbose",
action="store_const", dest="loglevel", const=logging.INFO,
)
args = parser.parse_args()
logging.basicConfig(level=args.loglevel)
Run Code Online (Sandbox Code Playgroud)
因此,如果--debug
设置,则将日志记录级别设置为DEBUG
.如果--verbose
,日志记录设置为INFO
.如果两者都没有,缺少--debug
将日志记录级别设置为默认值WARNING
.
Joh*_*web 71
您需要将Argparse教程的智慧与Python的Logging HOWTO结合起来.这是一个例子......
> cat verbose.py
#!/usr/bin/env python
import argparse
import logging
parser = argparse.ArgumentParser(
description='A test script for http://stackoverflow.com/q/14097061/78845'
)
parser.add_argument("-v", "--verbose", help="increase output verbosity",
action="store_true")
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.DEBUG)
logging.debug('Only shown in debug mode')
Run Code Online (Sandbox Code Playgroud)
运行帮助:
> ./verbose.py -h
usage: verbose.py [-h] [-v]
A test script for http://stackoverflow.com/q/14097061/78845
optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity
Run Code Online (Sandbox Code Playgroud)
以详细模式运行:
> ./verbose.py -v
DEBUG:root:Only shown in debug mode
Run Code Online (Sandbox Code Playgroud)
默默地运行:
> ./verbose.py
>
Run Code Online (Sandbox Code Playgroud)
Sti*_*ley 47
这是一个更简洁的方法,它执行边界检查,并将在帮助中列出有效值:
parser = argparse.ArgumentParser(description='This is a demo.')
parser.add_argument("-l", "--log", dest="logLevel", choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help="Set the logging level")
args = parser.parse_args()
if args.logLevel:
logging.basicConfig(level=getattr(logging, args.logLevel))
Run Code Online (Sandbox Code Playgroud)
用法:
demo.py --log DEBUG
Run Code Online (Sandbox Code Playgroud)
ece*_*ulm 22
另一种变体是计算数量-v
并使用计数作为a的索引list
,其实际级别来自logging
:
import argparse
import logging
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', action='count', default=0)
args = parser.parse_args()
levels = [logging.WARNING, logging.INFO, logging.DEBUG]
level = levels[min(len(levels)-1,args.verbose)] # capped to number of levels
logging.basicConfig(level=level,
format="%(asctime)s %(levelname)s %(message)s")
logging.debug("a debug message")
logging.info("a info message")
logging.warning("a warning message")
Run Code Online (Sandbox Code Playgroud)
这适用于-vvvv
,-vvv
,-vv
,-v
,-v -v
,等,如果没有-v
则logging.WARNING
选择更多,如果-v
提供的话,将会给INFO
和DEBUG
您可以明确指定一个级别作为-v
标志后的整数:
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", const=1, default=0, type=int, nargs="?",
help="increase verbosity: 0 = only warnings, 1 = info, 2 = debug. No number means info. Default is no verbosity.")
args = parser.parse_args()
logger = logging.getLogger()
if args.verbose == 0:
logger.setLevel(logging.WARN)
elif args.verbose == 1:
logger.setLevel(logging.INFO)
elif args.verbose == 2:
logger.setLevel(logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
59035 次 |
最近记录: |