检测Argparse中的子命令

时间:2018-01-18 18:16:16

标签: python-3.x argparse

以下解析器应该让我做一些子命令:

 % my_script acmd a_val

my_script.py中处理类似的事情(使用列表而不是实际的命令行。)

 import argparse
 parser = argparse.ArgumentParser(description='example')
 subparsers = parser.add_subparsers()
 acmd_parser = subparsers.add_parser('acmd')
 acmd_parser.add_argument('a_arg')
 bcmd_parser = subparsers.add_parser('bcmd')
 bcmd_parser.add_argument('b_arg')
 args = parser.parse_args(['acmd','a_val'])
 print(args)

结果如下:

 Namespace(a_arg='a_val')

如何判断我是acmd还是bcmd?我只需要从论点中弄明白吗?

1 个答案:

答案 0 :(得分:1)

dest命令提供add_subparsers参数,如

中所述

https://docs.python.org/3/library/argparse.html#sub-commands

>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(dest='subparser_name')
>>> subparser1 = subparsers.add_parser('1')
>>> subparser1.add_argument('-x')
>>> subparser2 = subparsers.add_parser('2')
>>> subparser2.add_argument('y')
>>> parser.parse_args(['2', 'frobble'])
Namespace(subparser_name='2', y='frobble')

这也记录了set_defaults的使用。