argparse中使用nargs ='*'的自动用法字符串和带有可选复数“(s)”的metavar的问题

时间:2019-11-11 08:10:32

标签: python argparse

我正在编写一个使用位置参数的程序,该参数接受参数的“其余”,像这样

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, ...]

(或者其他任何明智的选择,真的)

有没有简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

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

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