我创建了一个像这样的argparser:
parser = argparse.ArgumentParser(description='someDesc')
parser.add_argument(-a,required=true,choices=[x,y,z])
parser.add_argument( ... )
但是,仅用于选择“x”而不用于选择“y,z”,我想要一个额外的REQUIRED参数。例如。
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
答案 0 :(得分:5)
详细说明subparser方法:
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”属性。 如果必须使用-a
可选项,则可以使用两步解析
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错误机制
parser.error('-b required with -a x')
答案 1 :(得分:2)
ArgumentParser支持使用。创建此类子命令 add_subparsers()方法。 add_subparsers()方法通常是 没有参数调用并返回一个特殊的操作对象。这个 object有一个方法add_parser(),它接受一个命令名 和任何ArgumentParser构造函数参数,并返回一个 可以像往常一样修改的ArgumentParser对象。
ArgumentParser.add_subparsers()