首页 > 解决方案 > 来自 argparse 的自动使用字符串(带有 nargs='*' 和带有可选复数“(s)”的元变量)的问题

问题描述

我正在编写一个使用位置参数的程序,该参数接受“其余”参数,如下所示

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'filenames',
        nargs='*',
        metavar="filename(s)",
    )
    args = parser.parse_args()

在这里,我使用metavar参数来获得更好的帮助文本。但问题是usage字符串:

>python test_argparse_plural.py -h
usage: test_argparse_plural.py [-h] [filenames) [filename(s ...]]

positional arguments:
  filename(s)

optional arguments:
  -h, --help   show this help message and exit

似乎它不能很好地处理该(s)部分。我希望usage字符串是

test_argparse_plural.py [-h] [filename(s)]

也许

test_argparse_plural.py [-h] [filename1, filename2, ...]

(或其他任何合理的东西,真的)

有什么简单的方法可以实现这一目标吗?

标签: pythonargparse

解决方案


我遇到了同样的问题。这就是我想出的:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'filenames',
        nargs='+',
        metavar='filename',
        help='file(s) to process'
    )
    args = parser.parse_args()

这将产生以下用法:

nargs_plus_demo.py -h
usage: nargs_plus_demo.py [-h] filename [filename ...]

positional arguments:
  filename    file(s) to process

optional arguments:
  -h, --help  show this help message and exit

推荐阅读