add_parser
使用子解析器就可以了
import argparse
parser = argparse.ArgumentParser(prog='script.py')
sp = parser.add_subparsers(dest='cmd')
for cmd in ['START', 'STOP', 'STATUS']:
sp.add_parser(cmd)
for cmd in ['MOVEABS', 'MOVEREL']:
spp = sp.add_parser(cmd)
spp.add_argument('x', type=float)
spp.add_argument('y', type=float)
parser.print_help()
args = parser.parse_args()
print(args)
生产类似:
2137:~/mypy$ python2.7 stack23304740.py MOVEREL -h
usage: script.py [-h] {START,STOP,STATUS,MOVEABS,MOVEREL} ...
positional arguments:
{START,STOP,STATUS,MOVEABS,MOVEREL}
optional arguments:
-h, --help show this help message and exit
usage: script.py MOVEREL [-h] x y
positional arguments:
x
y
optional arguments:
-h, --help show this help message and exit
and
2146:~/mypy$ python2.7 stack23304740.py MOVEREL 1.0 2.0
...
Namespace(cmd='MOVEREL', x=1.0, y=2.0)
and
2147:~/mypy$ python2.7 stack23304740.py START
...
Namespace(cmd='START')
MOVEREL 参数可以命名为<x>
and <y>
,但是你必须通过以下方式访问它们args['<y>']
代替args.y
. metavar='<x>'
可用于更改显示,但不能更改命名空间名称。
你也可以使用spp.add_argument('point', nargs=2, type=float)
。不幸的是,有一个错误使我们无法在此使用元变量nargs=2
case, http://bugs.python.org/issue14074 http://bugs.python.org/issue14074.