我有一个名为Myscript.py的脚本,它接受以下参数
parser = argparse.ArgumentParser("MyParams")
parser.add_argument('-a', '--info', dest='info', help='info help', required=True)
parser.add_argument('-b', '--config', dest='config', help='config help', required=True)
parser.add_argument('-c', '--number', dest='number', help='numver help', required=True)
我还有一个参数-d,如下所示
parser.add_argument('-d', '--dest', dest='dest', help='dest help', required=True)
我想更新我的脚本以获得-a -b和-c在一起或-d alone.ie如果我传递-d然后我不能传递-a或-b或-c。这是可能的而不改变需要=假
脚本命令行应该
Myscript.py -d "inputFile"
或
Myscript.py -a "inputFile1" -b "inputFile2" -c "inputFile3"
答案 0 :(得分:1)
我不确定使用argparse
这是一件容易的事情 - 要么是必需的选项,要么不是。您无法根据其他内容进行切换。
你可以add_mutually_exclusive_group但这对你没有帮助 - 这是一个挑选一个(并且只有一个)的东西。
一般来说,我认为它并不能真正处理相互“包容性”的论点。我认为在这种情况下,你最好的选择是后处理:
namespace = parser.parse_args()
if namespace.d is None:
assert namespace.a is not None and namespace.b is not None and namespace.c is not None
else:
assert namespace.a is namespace.b is namespace.c is None
你可以在这里提出任何你想要的错误(甚至是parser.error
),assert
只是最快的写作。