argparse 实现了parents 功能,可让您将一个解析器的参数添加到另一个解析器。检查文档。或调整您的情况:
parser_x = argparse.ArgumentParser(add_help=False)
parser_x.add_argument('--abc')
parser_y = argparse.ArgumentParser(parents=[parser_x])
parser_y.add_argument('--temp1')
parser_y.add_argument('--temp2')
parser_y.print_help()
打印:
usage: ipython [-h] [--abc ABC] [--temp1 TEMP1] [--temp2 TEMP2]
optional arguments:
-h, --help show this help message and exit
--abc ABC
--temp1 TEMP1
--temp2 TEMP2
需要add_help=False 以避免parser_x 通常添加的-h 与parser_y 获得的parser_y 之间的冲突。
另一种方法是让x 将其参数添加到预定义的解析器:
def x(parser=None):
if parser is None:
parser = argparse.ArgumentParser()
parser.add_argument('--abc')
return parser
def y():
....
return parser
parsery = y()
parserx = x(parsery)
知道add_argument 返回对其创建的参数(Action 对象)的引用也可能很有用。
parser = argparse.ArgumentParser()
arg1 = parser.add_argument('--abc')
在 shell 中执行此操作,您会看到 arg1 显示为:
_StoreAction(option_strings=['--abc'], dest='abc', nargs=None,
const=None, default=None, type=None, choices=None,
help=None, metavar=None)
arg1 是一个可以放在列表、字典中的对象。理论上,您甚至可以将其添加到另一个解析器。这实际上就是父母机制所做的事情(即将动作引用从父母复制到孩子)。