繁体   English   中英

Python:argparse 的解析器在模块之间传递 args 是否有等效于 logging.getLogger(__name__) 的方法?

[英]Python: is there an equivalent to logging.getLogger(__name__) for argparse's parsers to pass args between modules?

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

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。

我在这里遗漏了一些明显的东西吗?

提前致谢!

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

我的配置文件

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM