在参数解析器中对参数进行分组

时间:2014-07-29 06:53:18

标签: python

我有一个名为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"

1 个答案:

答案 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只是最快的写作。