我正在使用 argparse 构建带有子命令的命令:
mycommand [GLOBAL FLAGS] 子命令 [FLAGS]
我希望全局标志无论在子命令之前还是之后都可以工作。有没有一种干净的方法来做到这一点而不涉及重复代码?
例如:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser_name')
parser.add_argument('--disable') # This flag...
sp = subparsers.add_parser('compile')
sp.add_argument('zones', nargs='*')
sp.add_argument('--disable') # Is repeated...
sp = subparsers.add_parser('launch')
sp.add_argument('zones', nargs='*')
sp.add_argument('--disable') # over and over...
我想对许多标志执行此操作,因此一遍又一遍地重复自己似乎......不符合Python标准。
这是一个完美的用例parents https://docs.python.org/2/library/argparse.html#parentsargparse 功能:
有时,多个解析器共享一组公共参数。相当
与重复这些参数的定义相比,单个解析器
与所有共享参数并传递给parents=参数
可以使用ArgumentParser。
定义一个基础父级ArgumentParser
,添加将在子解析器之间共享的参数。然后,添加子解析器并通过提供将基本解析器设置为父解析器parents
关键字参数:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser_name')
base_subparser = argparse.ArgumentParser(add_help=False)
# define common shared arguments
base_subparser.add_argument('--disable')
sp = subparsers.add_parser('compile', parents=[base_subparser])
# define custom arguments
sp = subparsers.add_parser('launch', parents=[base_subparser])
# define custom arguments
注意add_help=False
这有助于避免出现问题矛盾的help争论 https://stackoverflow.com/questions/18839957/argparseargumenterror-argument-h-help-conflicting-option-strings-h.
另请参阅:Python argparse - 向多个子解析器添加参数 https://stackoverflow.com/questions/7498595/python-argparse-add-argument-to-multiple-subparsers.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)