嗨,我正试图用几个只接受特定长参数的子parser配置argparse。下面是代码
import argparse
parser = argparse.ArgumentParser(prog='program', description='Prog Description')
subparsers = parser.add_subparsers(help='choices')
parser.add_argument('--choice', '-c', choices=['a', 'apple', 'b', 'banana', 'l', 'lemmon', 'p', 'papaya'], type=str, help='Menu Choices', required=True)
a_parser = subparsers.add_parser("a")
b_parser = subparsers.add_parser("b")
l_parser = subparsers.add_parser("l")
p_parser = subparsers.add_parser("p")
a_parser.add_argument("--peel")
b_parser.add_argument("--peel")
l_parser.add_argument("--lamount")
p_parser.add_argument("--pamount",required=True,type=str)
但我在以下几点上失败了。在
prog -c a
和{除了--pamount
,子parser的参数不是必需的。但代码似乎期望它们,因为我在运行有效模式python prog -c a
时遇到以下错误
用法:program[-h]——choice{a,apple,b,banana,l,lemmon,p,papaya} {a,p,b,l}。。。 程序:错误:参数太少
如果有人能为我提供一些解决这些问题的指导,我很高兴。谢谢您!在
通过使用
subparsers
,您不需要choice
可选。在指定
dest
在args
中为子parser名称定义一个槽(请参阅文档)。在当您使用
^{pr2}$'python prog -c a'
时,它将a
作为参数解析为-c
;但是它仍然需要一个类似于a
的字符串作为subparsers
的参数(这实际上是一个位置参数)。因此出现了错误。(换句话说,它不需要peel
参数;它在解析中还没有走到那么远。)应该行得通。在
也可以工作(需要pamount)。在
要接受“a”和“apple”作为子parser名称,请使用
aliases
参数(参见文档中的add_parser
)。在相关问题 更多 >
编程相关推荐