如何在使用子分析器时传入未定义的参数



当我使用子解析器时,子解析器是可选参数,我必须选择其中一个。现在,我想实现在传入子部分中未定义的选项参数(例如add_codition(时传入默认选项的功能。

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('add_condition', nargs='*')
subparsers = parser.add_subparsers(help='sub-command help', dest="character")
subparsers.required = False
# create the parser for the "a" command
parser_a = subparsers.add_parser('a', help='a help')
parser_a.add_argument('--bar', choices='ABC', help='bar help')
# create the parser for the "b" command
parser_b = subparsers.add_parser('b', help='b help')
parser_b.add_argument('--baz', choices='XYZ', help='baz help')

但是,当我传入子解析器和b解析器没有的选项时,例如key=value。理论上key=value应该在add_codition中通过。

程序结果总是提示:error: argument character: invalid choice: 'key' (choose from 'a', 'b')

python版本为3.6.9。

您正在添加"add condition"作为位置参数。如果您试图执行key=value类型的参数,则需要使用可选参数。位置参数不带键。

位置自变量的一些示例是cd命令或ls命令的路径

cd ~/Documents
#  ~/Documents is the positional argument
ls .
# . is the positional argument

可选参数可以构造为键值对,也可以用作布尔标志。例如,在cli中,对于使用--config并后跟文件名的curl程序,curl会将该特定文件名用作配置文件。这是键值对的一个例子。同样在curl中,您可以使用--get,它可以被解释为get=True,并告诉程序发送get请求,而不是默认的post请求。

因此,如果您正在尝试使用key=value,它应该更像这样。您仍然可以指定nargs="*"则解析器将把key=后面的所有内容都看作是一个包含多个空格分隔项的单个列表参数,或者直到它找到另一个有效参数为止。

parser.add_argument("--key", action='store', help="requires a value")

相关内容

  • 没有找到相关文章

最新更新