可选的 python 参数不带破折号但带有附加参数?

2023-12-20

我想要在 Python 中做的是接受以下格式的参数:

script.py START | STOP | STATUS | MOVEABS <x> <y> | MOVEREL <x> <y>

换句话说,

  1. 我不想处理连字符;
  2. 我有多种可能性,其中一种是必需的;
  3. 每一个都是互斥的;
  4. 某些命令(例如 moveabs 和 moverel)具有额外的必需参数,但这些参数不应与任何其他参数一起出现。

这可以在 python 中完成吗?我会使用 argparse 还是其他东西?谢谢。


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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可选的 python 参数不带破折号但带有附加参数? 的相关文章

随机推荐