使用argparse.REMAINDER时的用法消息

时间:2015-03-23 15:59:06

标签: python command-line-arguments argparse

我有一个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)

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

所以我的问题是,是否有一些简单的方法来改变它(即始终显示filesIn)?

1 个答案:

答案 0 :(得分:1)

不要在这里使用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