加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.com/)- 科技、建站、内容创作、云计算、网络安全!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-11-14 13:49:11 所属栏目:Python 来源:互联网
导读:我想在 Python中做的是接受以下格式的参数: script.py START | STOP | STATUS | MOVEABS x y | MOVEREL x y 换句话说, 我不想处理连字符; 我有多种可能性,其中一种是必需的; 每个都是互相排斥的; 某些命令(E.G.mobabs和moverel)具有其他必需参数,但这些参数

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

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

换句话说,

>我不想处理连字符;
>我有多种可能性,其中一种是必需的;
>每个都是互相排斥的;
>某些命令(E.G.mobabs和moverel)具有其他必需参数,但这些参数不应与任何其他参数一起出现.

这可以在python中完成,我会使用argparse还是别的?谢谢.

解决方法

add_parser和subparsers可以解决问题
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,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

2146:~/mypy$python2.7 stack23304740.py MOVEREL 1.0 2.0
...
Namespace(cmd='MOVEREL',x=1.0,y=2.0)

2147:~/mypy$python2.7 stack23304740.py START
...
Namespace(cmd='START')

MOVEREL参数可以命名为< x>和< y>,但是你必须通过args [‘< y>‘]而不是args.y来访问它们. metavar = ‘< X>’可用于更改显示但不能更改命名空间名称.

你也可以使用spp.add_argument(‘point’,nargs = 2,type = float).不幸的是,有一个错误阻止我们在这个nargs = 2的情况下使用metavar,http://bugs.python.org/issue14074.

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读