我一直在这里和一般情况下搜索很多子解析器示例,但似乎无法弄清楚这个看似简单的事情。
我有两种 var 类型,其中一种有约束,所以认为 subparser 是要走的路。例如 -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