日志记录库允许我们定义一个全局记录器,可以从任何导入的模块访问它,如下所示:
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
不会这样做,但是您可以在自己的模块中实现相同的功能。创建一个每个人都可以导入的模块,并让它为您执行参数解析。第一个调用触发参数解析,而其他仅获取结果。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
。