[英]Using python's argparse in multiple scripts backed by multiple custom modules
我正在构建一组用于管理基础架构的脚本和模块。 为了保持井井有条,我希望尽可能地加强努力,并尽量减少更新脚本的锅炉。
特别是这里的问题是合并ArgumentParser模块。
一个示例结构是使脚本和库组织如下:
|-- bin
|-- script1
|-- script2
|-- lib
|-- logger
|-- lib1
|-- lib2
在这种情况下, script1
可能只使用logger
和lib1
,而script2
将使用logger
和lib2
。 在这两种情况下,我希望记录器接受'-v'和'-d',而script1
也可以接受其他args和lib2
其他args。 我知道这会导致冲突,并会手动管理。
SCRIPT1
#!/usr/bin/env python
import logger
import lib1
argp = argparse.ArgumentParser("logger", parent=[logger.argp])
SCRIPT2
#!/usr/bin/env python
import logger
import lib2
记录仪
#!/usr/bin/env python
import argparse
argp = argparse.ArgumentParser("logger")
argp.add_argument('-v', '--verbose', action="store_true", help="Verbose output")
argp.add_argument('-d', '--debug', action="store_true", help="Debug output. Assumes verbose output.")
每个脚本和lib都可能拥有它自己的参数,但是这些都必须合并到一个最终的arg_parse()中
到目前为止,我的尝试导致无法继承/扩展argp设置。 如何在库文件和脚本之间完成?
最简单的方法是在每个模块中有一个接受ArgumentParser
实例的方法,并为其添加自己的参数。
# logger.py
def add_arguments(parser):
parser.add_argument('-v', '--verbose', action="store_true", help="Verbose output")
# ...
# lib1.py
def add_arguments(parser):
parser.add_argument('-x', '--xtreme', action="store_true", help="Extremify")
# ...
每个脚本都会创建自己的ArgumentParser
,将其传递给每个提供参数的模块,然后添加自己的特定参数。
# script1.py
import argparse, logger, lib1
parser = argparse.ArgumentParser("script1")
logger.add_arguments(parser)
lib1.add_arguments(parser)
# add own args...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.