Python:argparse的解析器是否在模块之间传递args等同于logging.getLogger(__ name __)?

问题描述 投票:0回答:1

日志记录库允许我们定义一个全局记录器,可以从任何导入的模块访问它,如下所示:

main_script.py:

import logging
import module.py

if __name__ == "__main__":
    logging.config.fileConfig('/path/to/logging.conf')
    main(sys.argv[1:])

然后在module.py中:

import logging
logger = logging.getLogger(__name__)

这很棒,因为这意味着不需要在模块之间传递详细或调试标志。

我本来以为argparse会存在等效的东西,例如允许在主脚本中或在单独的模块中进行解析,然后提供从任何其他模块访问它们的方式。毕竟,可以从任何模块访问sys.argv,但在每个模块中重新创建一个新的解析器以访问它们似乎有些荒谬。另一种方法是在函数调用中传递args。

我在这里错过明显的东西吗?

提前感谢!

python logging module global argparse
1个回答
0
投票
logging在其模块名称空间中跟踪记录器。由于logging.logger在该名称空间中运行,因此很容易找到所需的记录器。 argparse不会这样做,但是您可以在自己的模块中实现相同的功能。创建一个每个人都可以导入的模块,并让它为您执行参数解析。第一个调用触发参数解析,而其他仅获取结果。

myconfig.py

import sys import argparse args = None def get_args(argv=sys.argv): global args if args is None: parser = argparse.ArgumentParser(description='Foo The Bar') # todo: add arguments… args = parser.parse_args(argv) return args

[一个人可能想在主脚本处理过程中尽早调用get_args,以防出现错误,或者可能所有需要的呼叫者都是--help
© www.soinside.com 2019 - 2024. All rights reserved.