簡體   English   中英

Python argparse - 根據另一個參數使 arguments 成為必需或可選

[英]Python argparse - make arguments required or optional based on another argument

程序如何根據先前的參數/選項接受/驗證一組參數?

例如:

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

編輯:如果你想使用共享參數,其中一個參數是必需的,而其他參數是可選的,最好讓它們成為可選的,然后像你說的那樣稍后驗證它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM