Ash*_*hex 3 python python-2.7 argparse
我有一个具有两个主要功能的脚本:升级和配置。我使用子解析器来指示脚本执行的操作,但我想避免将它们一起使用。
这是代码片段:
import argparse
def main():
parser = argparse.ArgumentParser()
subparser = parser.add_subparsers(help='sub-command help')
parser.add_argument('--user', '-u', help='User', default=None, required=True)
parser.add_argument('--password', '-p', help='Password', default=None, required=True)
parser.add_argument('--server', '-s', help='server with Admin functionality', default=None, required=True)
subparser_prov = subparser.add_parser('provision', help='Provision new managers')
subparser_prov.set_defaults(which='provision')
subparser_upgr = subparser.add_parser('upgrade', help='Upgrade worker by replacing them')
subparser_upgr.set_defaults(which='upgrade')
subparser_upgr.add_argument('--version', help='Deployment version', default=None)
args = vars(parser.parse_args())
print args['user']
print args['password']
if args['which'] == 'provision':
print 'Provisioning new environment!'
elif args['which'] == 'upgrade':
print 'Upgrading workers! %s' % args['version']
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
我知道解析器和子解析器都支持 add_mutually_exclusive_group() 但这是专门针对参数的。对于子解析器,有什么方法可以避免它们一起使用吗?
是的,它们是互斥的,尽管其机制与 MXGroup 不同。
subparser = parser.add_subparsers(help='sub-command help')
Run Code Online (Sandbox Code Playgroud)
是一个add_argument
创建参数的命令positional
,具有特殊的action
类。除其他外,它具有价值choices
。
subparser.add_parser(...)
Run Code Online (Sandbox Code Playgroud)
创建一个parser
,并将其“名称”(和别名)添加到subparser
s choices
。
位置参数仅解析一次,因此仅处理一个子解析器。子解析器通常会处理所有剩余的参数。
有一些问题询问如何解决这个问题 - 即他们想要处理多个子解析器。做到这一点的方法很棘手,并且涉及递归(或重复)调用解析器,每次都使用较小的原始参数集。
归档时间: |
|
查看次数: |
5011 次 |
最近记录: |