python - Python argparse 多个元变量名称
问题描述
我正在使用argparse
python 中的库。有时,我使用一个名为的参数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
,而且我觉得必须有另一种(更好的)方法来做到这一点。我做对了吗?
解决方案
通过深入滚动文档,我找到了答案
不同的 nargs 值可能会导致 metavar 被多次使用。为 metavar 提供一个元组为每个参数指定不同的显示:
确实,这工作得很好:
parser.add_argument("-p", "--param", nargs=2, action="append",
help="key and value for query parameters",
type=str, metavar=("key", "value")
)
推荐阅读
- html - 我读了这个 json 文本字符串,它拒绝用换行符显示
- attributes - Apache NiFi如何将逗号附加到属性的值
- java - 如何防止在recyclerview中调整项目大小
- python - 如何在 django 中显示登录用户的客户?
- angular - 如何使用管道运算符将合并的对象与内部可观察对象
- webrtc - 我可以保存 webrtc 报价以供将来连接吗?
- firebase - 我有我的 Firebase 图像的下载 URL,我想将它们转换为对云中图像的引用。有干净的方法吗?
- python - 有没有办法将可迭代的可迭代对象中的所有元素添加到没有 Python 中的 for 循环的列表中?
- spring-boot - 谷歌云视觉 API 使用从图像/pdf 中提取文本
- python-3.x - XGboost 目标:有没有办法进行多标签(不是多类)分类?