rad*_*adj 6 python logging python-2.7 argparse
我已将其配置logger为在终端stdout和文件上打印,因此我可以拥有可以参考的日志消息存档.
通过向对象添加a FileHandler可以轻松完成logging.十分简单.
我现在要完成的是argparse在遇到解析错误时将日志与日志一起发送到stdout.到目前为止它只打印到stdout.我查看了argparse 文档,但是我找不到任何有关为其设置不同输出流或管道的信息argparse.
有可能吗?怎么样?
查看argparse.py源代码似乎没有办法配置此行为.
我的建议是:
覆盖/补丁:
print_* 方法)error 方法.的print_*方法(或多个)似乎采取可选的file缺省值为参数_sys.stdout.
更新:或者您可以执行以下操作sys.stdout:在解析参数时临时重定向:
from contextlib import contextmanager
@contextmanager
def redirect_stdout_stderr(stream):
old_stdout = sys.stdout
old_stderr = sys.stderr
sys.stdout = stream
sys.stderr = stream
try:
yield
finally:
sys.stdout = old_stdout
sys.stderr = old_stderr
with redirct_stdout_stderr(logstream):
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
似乎没有办法通过 API 来做到这一点。
但是,您可以执行以下操作:
class LoggingArgumentParser(argparse.ArgumentParser):
"""Custom ArgumentPaarser that overrides _print_message"""
def _print_message(self, message, file=None):
if message:
logger.write(message)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |