如何在Python中为argparse设置自定义输出处理程序?

rad*_*adj 6 python logging python-2.7 argparse

我已将其配置logger为在终端stdout和文件上打印,因此我可以拥有可以参考的日志消息存档.

通过向对象添加a FileHandler可以轻松完成logging.十分简单.

我现在要完成的是argparse在遇到解析错误时将日志与日志一起发送到stdout.到目前为止它只打印到stdout.我查看了argparse 文档,但是我找不到任何有关为其设置不同输出流或管道的信息argparse.

有可能吗?怎么样?

Jam*_*lls 8

查看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)


orl*_*rlp 5

似乎没有办法通过 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)