it-swarm.cn

Python argparse - 为多个子分析器添加参数

我的脚本定义了一个主解析器和多个子解析器。我想将-p参数应用于某些子分析符。到目前为止代码看起来像这样:

parser = argparse.ArgumentParser(prog="myProg")
subparsers = parser.add_subparsers(title="actions")

parser.add_argument("-v", "--verbose",
                    action="store_true",
                    dest="VERBOSE",
                    help="run in verbose mode")

parser_create = subparsers.add_parser ("create", 
                                        help = "create the orbix environment")
parser_create.add_argument ("-p", 
                            type = int, 
                            required = True, 
                            help = "set db parameter")

# Update
parser_update = subparsers.add_parser ("update", 
                                        help = "update the orbix environment")
parser_update.add_argument ("-p", 
                            type = int, 
                            required = True, 
                            help = "set db parameter")

如您所见,add_arument ("-p")重复两次。我实际上有更多的subsparsers。有没有办法循环遍历现有的子分析符以避免重复?

为了记录,我使用的是Python 2.7

50
rahmu

这可以通过定义 父解析器 包含公共选项来实现:

[...]
parent_parser = argparse.ArgumentParser(add_help=False)
parent_parser.add_argument("-p", type=int, required=True,
                           help="set db parameter")
parser_create = subparsers.add_parser("create", parents=[parent_parser],
                                      help="create the orbix environment")
parser_update = subparsers.add_parser("update", parents=[parent_parser],
                                      help="update the orbix environment")
68
Sven Marnach

您还可以遍历子分析器并为所有子分析器添加相同的选项。

parser = argparse.ArgumentParser(prog="myProg")
subparsers = parser.add_subparsers(title="actions")
parser.add_argument("-v", "--verbose",
                    action="store_true",
                    dest="VERBOSE",
                    help="run in verbose mode")

parser_create = subparsers.add_parser ("create", 
                                        help = "create the orbix environment")
parser_update = subparsers.add_parser ("update", 
                                        help = "update the orbix environment")

for subparser in [parser_create, parser_update]:
    subparser.add_argument ("-p", 
                            type = int, 
                            required = True, 
                            help = "set db parameter")
8
JanK

您可以按照以下方式循环遍历子分段。

for name, subp in subparsers.choices.items():
    print(subp)
    subp.add_argument(dest='g', help='Inpput for g variable', default='7')
2
Gerard Kool