首页 > 解决方案 > Python argparse 多个元变量名称

问题描述

我正在使用argparsepython 中的库。有时,我使用一个名为的参数param,它需要 2 个参数:一个键和一个值。我使用的代码行如下:

parser.add_argument("-p", "--param", nargs=2, action="append", 
                    help="key and value for query", 
                    type=str, metavar="key value"
                    )

这里的问题是当我调用帮助时,它显示如下:

optional arguments:
    -h, --help            show this help message and exit
    -p key value key value, --param key value key value
                          key and value for query parameters

名称“键值”重复两次。我尝试使用列表和生成器,但我发现的唯一方法是创建一个包含不同值的小类,并在要求__str__喜欢时生成它们:

class Meta:
    def __init__(self, iterable):
        self.gene = itertools.cycle(iterable)

    def __str__(self):
        return self.gene.__next__()

add_argument这样称呼:

parser.add_argument("-p", "--param", nargs=2, action="append", 
                    help="key and value for query parameters",
                    type=str, metavar=Meta(["key", "value"])
                    )

它显示正确:

-p key value, --param key value
                    key and value for query parameters

但是我发现使用像这样的临时类非常难看Meta,而且我觉得必须有另一种(更好的)方法来做到这一点。我做对了吗?

标签: pythonargparse

解决方案


通过深入滚动文档,我找到了答案

不同的 nargs 值可能会导致 metavar 被多次使用。为 metavar 提供一个元组为每个参数指定不同的显示:

确实,这工作得很好:

parser.add_argument("-p", "--param", nargs=2, action="append", 
                    help="key and value for query parameters",
                    type=str, metavar=("key", "value")
                    )

推荐阅读