我正在使用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...
Run Code Online (Sandbox Code Playgroud)
我想为许多旗帜做这件事,所以一遍又一遍地重复自己似乎...... unpythonic.
ale*_*cxe 11
这是parentsargparse功能的完美用例:
有时,几个解析器共享一组共同的参数.可以使用具有所有共享参数并传递给ArgumentParser的parents =参数的单个解析器,而不是重复这些参数的定义.
定义基本父级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
Run Code Online (Sandbox Code Playgroud)
请注意,add_help=False这有助于避免参数冲突的help问题.
另请参阅:Python argparse - 为多个子分析器添加参数.
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |