我一直在这里和一般情况下搜索大量的子Parser示例,但似乎无法找出这个看似简单的问题。
我有两种var类型,其中一种有约束条件,所以认为subparser是可行的方法。e、 g.-t允许“A”或“B”。如果用户通过“A”,则还需要指定它是“a1”还是“a2”。如果他们只通过了“B”,那就什么都没有了。
我可以这样做,让argparse返回我传递了什么类型的“A”,或者如果它只是“B”?
下面的内容似乎很有效,但由于某些原因,在通过任何传票之后都会中断。
例如,从linux终端
>> python test01.py -t A a1 -v 61
错误。。。
usage: test01.py a1 [-h]
test01.py a1: error: unrecognized arguments: -v
希望这是有意义的。
代码:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='types of A')
parser.add_argument("-t",
choices = ["A", "B"],
dest = "type",
required=True,
action='store',
help="Some help blah blah")
cam_parser = subparsers.add_parser('a1', help='Default')
cam_parser.set_defaults(which='a1')
cam_parser = subparsers.add_parser('a2', help='parse this instead of default')
cam_parser.set_defaults(which='a2')
parser.add_argument("-v",
nargs = '+',
required=True,
dest = "version",
type=int,
action='store',
help="some version help blah blah")
argument = parser.parse_args()
print argument.type
print argument.version
子parser是基于第一个positional参数的值调用的,因此您的调用看起来像
“A”触发相应的子parser,该子parser将被定义为允许位置参数和
-v
选项。因为
argparse
不会以其他方式对参数和选项的出现顺序施加任何限制,而且一旦解析开始,就没有简单的方法来修改可能出现的参数/选项(涉及修改解析器实例的自定义操作的操作可能会起作用),您应该考虑替换-t
本身:因为
-v
是为主解析器定义的,所以必须在指定剩余参数使用哪个子解析器的参数之前指定它。相关问题 更多 >
编程相关推荐