我如何获得argparse来识别跟随可变长度可选参数的位置参数?

问题描述 投票:1回答:1

我正在编写一个脚本,该脚本将用于合并多个输入文件,生成一个输出文件,并且我想使用argparse构建一个小的命令行界面。对我来说,最自然的做法是有一个可选输入argparse,它接受一个或多个输入文件名,后跟一个位置参数,代表输出文件名。这是我所想到的一个示例:

-i

当我打印由#!/usr/bin/env python3 """ Script for merging input files """ import argparse script_docstring = 'Read some input files and create a merged output.' parser = argparse.ArgumentParser(description=script_docstring) # Optional input file names parser.add_argument('-i --inputs', nargs='+', type=str, required=True, help='Input file names', dest='inputs') # Positional output file name parser.add_argument('fname_out', type=str, help='Output file name') args = parser.parse_args() # Display what the user chose at the command line print(args.inputs) print(args.fname_out) 创建的自动生成的帮助消息时,呼叫签名看起来像我想要的:

argparse

但是,当我实际尝试运行脚本时,它给出一个错误,提示我> ./mergefiles.py --help usage: mergefiles.py [-h] -i --inputs INPUTS [INPUTS ...] fname_out Read some input files and create a merged output. positional arguments: fname_out Output file name optional arguments: -h, --help show this help message and exit -i --inputs INPUTS [INPUTS ...] Input file names 错误地解析了最终的位置参数,就好像它要包含在可选参数列表中一样:

argparse

我的问题:甚至有可能让> ./mergefiles.py -i a.in b.in c.in test.out usage: mergefiles.py [-h] -i --inputs INPUTS [INPUTS ...] fname_out mergefiles.py: error: the following arguments are required: fname_out 正确处理此类情况,将最后一个参数视为位置吗?或者,我是接受“解决方法”解决方案的唯一选择,例如也将输出文件名也转换为可选参数,例如argparse或类似参数。

如果无法做我想做的事,那么我计划将其完全实现为我的后备解决方案。但是,在我接受一个优雅的解决方法之前,我很好奇是否真的有可能让-f --fname_out以“正确”的方式进行处理。]

我正在编写一个脚本,该脚本将用于合并多个输入文件,生成一个输出文件,并且我想使用argparse构建一个小的命令行界面。对我来说,最自然的......

python argparse optional-parameters positional-parameter
1个回答
3
投票

当使用位置作为最后一个参数时,必须使用-分隔参数:

© www.soinside.com 2019 - 2024. All rights reserved.