【发布时间】:2020-07-22 17:16:24
【问题描述】:
日志库允许我们定义一个可以从任何导入的模块访问的全局记录器,如下所示:
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。
我在这里遗漏了什么明显的东西吗?
提前致谢!
【问题讨论】:
-
argparse相对简单且独立。正如您所注意到的,它访问sys.argv。否则它没有任何全局体现或钩子。通常parse_args()是从if __name__=='__main__':块调用的,所以它只被main脚本使用,而不是被导入的模块使用。拥有多个活跃的解析器是自找麻烦。 -
这也是我的观点,但我想避免在我的大多数模块中将 args 作为每个函数的第一个参数(这是它所采用的方向......)所以我想知道是否有其他被认为是最佳做法的替代方法。
标签: python logging module global argparse