【发布时间】:2018-02-06 00:51:32
【问题描述】:
我正在尝试制作一个脚本,将所有错误记录到日志文件中。我想在这个文件中包含任何argparse 错误。我已经使用logging 包和sys.excepthook 来驱动日志文件的意外异常。
这是一个示例代码:
import argparse
import logging
import sys
import traceback
def log_uncaught_exceptions(ex_cls, ex, tb):
logging.critical(''.join(traceback.format_tb(tb)))
logging.critical('{0}: {1}'.format(ex_cls, ex))
logging.basicConfig(
level=logging.DEBUG,
filename='foo.log',
filemode='w',
format='%(asctime)s - %(levelname)s - %(message)s')
sys.excepthook = log_uncaught_exceptions
logging.debug('This is a typical debug line')
parser = argparse.ArgumentParser(description='Foo String')
parser.add_argument('foo',type=int)
args = parser.parse_args()
logging.debug('Input was %i'%(args.foo))
当我使用python logger_argparse.py 1 运行它时,一切正常。如果我运行python logger_argparse.py a,我会在控制台中得到输出,而不是日志文件:
usage: logger_argparse.py [-h] foo
logger_argparse.py: error: argument foo: invalid int value: 'a'
如何将这些信息写入日志文件?
【问题讨论】:
-
它不起作用,因为
logger_argparse.py: error: argument foo: invalid int value: 'a'不是引发的异常,它只是来自argparse的打印输出。 -
有什么好的方法可以中断打印以使其进入文件吗?
-
在
argparse.py文件中,查看error和exit之类的方法(文档中也提到了它们)。大多数解析错误引发ArgumentError,然后被这些捕获,一条消息打印到stderr,然后它调用sys.exit。 -
在 [argparse] [logging] 上搜索时发现:stackoverflow.com/questions/29935283/…