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