我已经在这里和其他地方搜索了许多子解析器示例,但似乎无法弄清楚这个看似简单的问题。
我有两种变量类型,其中一种有约束条件,因此认为子解析器是合适的选择。例如,-t 允许使用"A"或"B"。如果用户传递"A",则进一步需要指定它是"a1"还是"a2"。如果他们只传递"B"则不需要。
我能做到这一点吗,并让argparse返回传递的"A"类型或是否只传递了"B"?
以下似乎可以工作,但由于某种原因在通过子解析后传递任何内容时会出现错误。
例如,在linux终端中:
希望这有意义。
代码:
我有两种变量类型,其中一种有约束条件,因此认为子解析器是合适的选择。例如,-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
group1 = parser.add_subparsers(help='subparser group 1')
和group2 = parser.add_subparsers(help='subparser group 2')
时出现了error:cannot have multiple subparser arguments
错误。我希望使用它来分组子命令。 - Minh Trana_parser.add_subparsers()
和b_parser.add_subparsers()
。 - chepnerargs = parser.parse_args()
,然后类似于if args.thing: <do thing>
这样的语句,但是对于子解析器,这个过程并不清晰。 - baxxargparse
文档的这一部分最后展示了一个例子,根据提供的子命令执行一个函数或另一个函数。 - chepner