您好我正在尝试使用几个仅接受特定长参数的子分析器来配置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
和prog -c apple
合法且相同--pamount
之外,不需要子分析符。但是代码似乎在期待它们,因为我在运行有效模式python prog -c a
用法:程序[-h] - 选择{a,apple,b,banana,l,lemmon,p,papaya} {a,p,b,l} ...... 程序:错误:参数太少
如果有人能为我提供解决这些问题的指导,我很高兴。谢谢!
答案 0 :(得分:0)
使用subparsers
,您不需要--choice
可选。
subparsers = parser.add_subparsers(dest='choice', help='choices')
# parser.add_argument('--choice', '-c', choices=['a', 'apple', 'b', 'b ...
指定dest
以在args
中为子分析者名称定义一个位置(请参阅文档)。
当您使用'python prog -c a'
时,它会将a
解析为-c
;但它仍然期望像a
这样的字符串作为subparsers
的参数(实际上是位置参数)。因此错误。 (换句话说,它不期望--peel
参数;它在解析中没有那么远。)
python prog a
python prog a --peel 3
应该有用。
python prog p --pamount 1
也应该有效(需要--pamount)。
要接受'a'和'apple'作为subparser名称,请使用aliases
参数(请参阅add_parser
的文档)。
a_parser = subparsers.add_parser("a", aliases=['apple','apples','manzana'])