如何标记cli arg依赖于另一个arg存在?

时间:2017-08-09 15:39:31

标签: python python-3.x command-line dependencies argparse

我正在使用python3.4
问题涉及https://docs.python.org/3/library/argparse.html

如果我希望arg --with_extra_actions始终包含--arg1--arg2,并在缺少其中一个时给出错误消息?

示例:
command --arg1 --with_extra_actions这应该有效 command --arg2 --with_extra_actions这应该有效 command --with_extra_actions这应该会因信息错误而失败。

我现在正在代码本身中这样做。没有问题,但argparse lib是否有内在的方法来执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以使用add_mutually_exclusive_group执行此操作。这里的例子(test.py):

import argparse
import sys


parser = argparse.ArgumentParser(prog='our_cmd')
# with_extra_actions is always required
parser.add_argument(
    '--with_extra_actions',
    required=True,
    action='store_false'
)

# only one argument from group is available
# group is required - one from possible arguments is required
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--arg1', action='store_true')
group.add_argument('--arg2', action='store_true')

parser.parse_args(sys.argv[1:])

现在让我们检查一下我们的脚本:

python test.py --with_extra_actions
usage: our_cmd [-h] --with_extra_actions (--arg1 | --arg2)
our_cmd: error: one of the arguments --arg1 --arg2 is required

让我们试试arg1arg2

python test.py --arg1 --arg2 --with_extra_actions
usage: our_cmd [-h] --with_extra_actions (--arg1 | --arg2)
our_cmd: error: argument --arg2: not allowed with argument --arg1

没有任何错误:

python test.py --arg1 --with_extra_actions
python test.py --arg2 --with_extra_actions

希望这有帮助。