能否告诉python 2.7中的argparse至少需要两个参数?
问题内容:
我的应用程序是一种专用的文件比较实用程序,显然只比较一个文件没有意义,因此nargs='+'
不太合适。
nargs=N
仅允许最大数量的N
参数,但只要有至少两个参数,我就需要接受无限数量的参数。
问题答案:
简短的答案是您不能这样做,因为nargs不支持“ 2+”之类的东西。
长答案是您可以使用以下方法解决此问题:
parser = argparse.ArgumentParser(usage='%(prog)s [-h] file file [file ...]')
parser.add_argument('file1', nargs=1, metavar='file')
parser.add_argument('file2', nargs='+', metavar='file', help=argparse.SUPPRESS)
namespace = parser.parse_args()
namespace.file = namespace.file1 + namespace.file2
您需要的技巧是:
- 用于
usage
向解析器提供您自己的用法字符串 - 用于
metavar
在帮助字符串中显示具有不同名称的参数 - 使用
SUPPRESS
以避免显示帮助的一个变量 - 合并两个不同的变量,只是向
Namespace
解析器返回的对象添加新属性
上面的示例生成以下帮助字符串:
usage: test.py [-h] file file [file ...]
positional arguments:
file
optional arguments:
-h, --help show this help message and exit
并且在传递少于两个参数时仍会失败:
$ python test.py arg
usage: test.py [-h] file file [file ...]
test.py: error: too few arguments