python - 如何让 argparse 检查互斥的参数组

标签 python python-2.7 argparse

我有一个测试代码如下,它将采用位置参数 file 或所有可选参数 timeexpression名称:

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("-t","--time")
parser.add_argument("-x","--expression")
parser.add_argument("-n","--name")
parser.add_argument("file")

print parser.parse_args()

以下组合应该有效

test.py filename
test.py -t 5 -x foo -n test

但不是这些:

test.py filename -t 5 # should raise error because the positional and the optional -t argument cannot be used together
test.py -t 5 -x foo # should raise an error because all three of the optional arguments are required

这个问题有什么简单的解决方案吗?

最佳答案

第一个问题是您已指定该文件是位置文件,这将使其成为必需文件。您可能需要将其转换为可选参数。

这是检查是否提供了正确参数的简单方法:

import argparse
parser = argparse.ArgumentParser()

parser.add_argument("-t","--time")
parser.add_argument("-x","--expression")
parser.add_argument("-n","--name")
parser.add_argument("-f", "--file")

args = parser.parse_args()

has_file = args.file is not None
has_txn = None not in frozenset([args.time, args.expression, args.name])
assert (has_file ^ has_txn), "File or time, expression and name must be provided"

关于python - 如何让 argparse 检查互斥的参数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15804859/

相关文章:

python - 如何处理 argparse 中缺少的参数?

python - 如何检测 Pandas 对象列中的子类型?

python - 使用 cx_freeze 卡住的 pyGTK 应用程序看起来有所不同

python - Django(1.4.2)出现如下错误如何解决

python - 执行具有 "from __future__ import ..."的 AquaMacs 缓冲区

python - 无法让 NLTK-Trainer 识别/使用 scikit-learn 分类器

python split 函数无法按预期工作

python - 删除几列后从 0 开始重新分配列标签

python - SQLAlchemy:如何处理重复条目中的 bulk_save_objects()?

python - 'required' 是 python 命令中位置参数的无效参数