用于部分选择的多个参数的python argparser [英] python argparser for multiple arguments for partial choices
本文介绍了用于部分选择的多个参数的python argparser的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我像这样创建了一个 argparser:
I create a argparser like this:
parser = argparse.ArgumentParser(description='someDesc')
parser.add_argument(-a,required=true,choices=[x,y,z])
parser.add_argument( ... )
但是,仅针对选项x"而不是选项y,z",我想要一个额外的 REQUIRED 参数.例如.
However, only for choice "x" and not for choices "y,z", I want to have an additional REQUIRED argument. For eg.
python test -a x // not fine...needs additional MANDATORY argument b
python test -a y // fine...will run
python test -a z // fine...will run
python test -a x -b "ccc" // fine...will run
我怎样才能用 ArgumentParser 实现这一点?我知道使用 bash optparser 是可能的
How can I accomplish that with ArgumentParser? I know its possible with bash optparser
推荐答案
详细说明 subparser 方法:
To elaborate on the subparser approach:
sp = parser.add_subparsers(dest='a')
x = sp.add_parser('x')
y=sp.add_parser('y')
z=sp.add_parser('z')
x.add_argument('-b', required=True)
- 这与您的规范不同,因为不需要
-a
. dest='a'
参数确保命名空间中有一个 'a' 属性.- 通常不需要像'-b'这样的可选项.子解析器x"也可以采用所需的位置.
- this differs from your specification in that no
-a
is required. dest='a'
argument ensures that there is an 'a' attribute in the namespace.- normally an optional like '-b' is not required. Subparser 'x' could also take a required positional.
如果您必须使用 -a
可选,两步解析可能会起作用
If you must use a -a
optional, a two step parsing might work
p1 = argparse.ArgumentParser()
p1.add_argument('-a',choices=['x','y','z'])
p2 = argparse.ArgumentParser()
p2.add_argument('-b',required=True)
ns, rest = p1.parse_known_args()
if ns.a == 'x':
p2.parse_args(rest, ns)
第三种方法是事后自己做测试.您仍然可以使用 argparse 错误机制
A third approach is to do your own test after the fact. You could still use the argparse error mechanism
parser.error('-b required with -a x')
这篇关于用于部分选择的多个参数的python argparser的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文