Python根据另一个参数使参数成为必需或可选的



程序如何根据先前的参数/选项接受/验证一组参数?

例句:

params:
<action1> -p <path>  -name <name> -t <type>
<action2> -v <value> -name <name>
<action3> -p <path> -t <type>
<action4> -m <mode1 | mode2>
--verbose
--test
--..

因此,如果使用actionX参数之一(只能使用一个),则可能需要其他参数。例如,对于action2,-v-name是必需的。

有效输入:

python myparser.py action2 -v 11 -name something --test --verbose
python myparser.py action4 -m mode1 
python myparser.py --test 

无效输入:

python myparser.py action2 -v 11 
python myparser.py action4 -n name1

argparse是否可以验证这一点,或者最好将它们全部添加为可选并稍后验证它们?

可以使用子解析器

简单的例子

from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("--test", action="store_true")
subparsers = parser.add_subparsers()
parser_action2 = subparsers.add_parser("action2")
parser_action2.add_argument("-v", required=True)
parser_action2.add_argument("-name", type=str, required=True)
parser_action4 = subparsers.add_parser("action4")
parser_action4.add_argument("-m", type=str, required=True)

有效的情况下

parser.parse_args(["action2", "-v", "11", "-name", "something"])
parser.parse_args(["action4", "-m", "mode1"])
parser.parse_args(["--test"])
# Namespace(v='11', name='something')
# Namespace(m='mode1')
# Namespace(test=True)

无效的情况下

parser.parse_args(["action2", "-v", "11"])
# action2: error: the following arguments are required: -name
parser.parse_args(["action4", "-n", "name1"])
# action4: error: the following arguments are required: -m

编辑:如果你想使用共享参数,其中一个是必需的,另一个是可选的,最好把它们设置为可选的,然后再验证它们。

相关内容

最新更新