使用Python Argparse和几个子命令解析器

2024-04-18 00:40:45 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正试图用几个只接受特定长参数的子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}。。。 程序:错误:参数太少

如果有人能为我提供一些解决这些问题的指导,我很高兴。谢谢您!在


Tags: 代码addparserapple参数argparsehelpprogram
1条回答
网友
1楼 · 发布于 2024-04-18 00:40:45

通过使用subparsers,您不需要 choice可选。在

subparsers = parser.add_subparsers(dest='choice', help='choices')
# parser.add_argument(' choice', '-c', choices=['a', 'apple', 'b', 'b ...

指定destargs中为子parser名称定义一个槽(请参阅文档)。在

当您使用'python prog -c a'时,它将a作为参数解析为-c;但是它仍然需要一个类似于a的字符串作为subparsers的参数(这实际上是一个位置参数)。因此出现了错误。(换句话说,它不需要 peel参数;它在解析中还没有走到那么远。)

^{pr2}$

应该行得通。在

python prog p  pamount 1

也可以工作(需要pamount)。在

要接受“a”和“apple”作为子parser名称,请使用aliases参数(参见文档中的add_parser)。在

a_parser = subparsers.add_parser("a", aliases=['apple','apples','manzana'])

相关问题 更多 >

    热门问题