使用 argparse.REMAINDER 时的用法信息

Usage message when using argparse.REMAINDER

我有一个 Python 程序,它的(唯一)位置命令行参数是一个或多个文件路径表达式。我使用 argparse 进行 CL 解析,argparse.REMAINDER 用于包含文件路径的变量。请参阅下面的代码:

import argparse
import sys

# Create parser
parser = argparse.ArgumentParser(
    description="My test program")

def parseCommandLine():
    # Add arguments
    parser.add_argument('filesIn',
                        action="store",
                        type=str,
                        nargs=argparse.REMAINDER,
                        help="input file(s)")

    # Parse arguments
    args = parser.parse_args()

    return(args)

def main():
    # Get input from command line
    args = parseCommandLine()

    # Input files
    filesIn = args.filesIn

    # Print help message and exit if filesIn is empty
    if len(filesIn) == 0:
        parser.print_help()
        sys.exit()

    # Do something
    print(filesIn)

if __name__ == "__main__":
    main()

现在,当用户在没有任何参数的情况下运行脚本时,会产生以下帮助消息:

usage: test.py [-h] ...

其中...表示位置输入。从用户的角度来看,如果在此处显示变量名称 (filesIn) 会提供更多信息。特别是因为键入 test.py -h 结果是:

usage: test.py [-h] ...

My test program

positional arguments:
  filesIn     input file(s)

即usage 行显示 ... 但随后在位置参数列表中使用 filesIn

所以我的问题是是否有一些简单的方法可以更改此设置(即始终显示 filesIn)?

这里不要使用argparse.REMAINDER。您没有收集所有剩余的参数,您正在尝试获取文件名。

改为使用 '+' 将所有剩余参数捕获为文件名,您至少需要一个:

parser.add_argument('filesIn',
                    action="store",
                    type=str,
                    nargs='+',
                    help="input file(s)")

这会产生更好的帮助输出:

$ bin/python test.py 
usage: test.py [-h] filesIn [filesIn ...]
test.py: error: too few arguments
$ bin/python test.py -h
usage: test.py [-h] filesIn [filesIn ...]

My test program

positional arguments:
  filesIn     input file(s)

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