gpt4 book ai didi

python - 在组间使用互斥

转载 作者:太空狗 更新时间:2023-10-29 20:30:46 26 4
gpt4 key购买 nike

我试图在不同的组之间建立一个互斥的组:我有参数 -a、-b、-c,我想与 -a 和 -b 一起或 -a 和 -c 一起发生冲突。帮助应该显示类似 [-a | ([-b] [-c])].

下面的代码似乎没有互斥选项:

import argparse
parser = argparse.ArgumentParser(description='My desc')
main_group = parser.add_mutually_exclusive_group()
mysub_group = main_group.add_argument_group()
main_group.add_argument("-a", dest='a', action='store_true', default=False, help='a help')
mysub_group.add_argument("-b", dest='b', action='store_true',default=False,help='b help')
mysub_group.add_argument("-c", dest='c', action='store_true',default=False,help='c help')
parser.parse_args()

解析不同的组合——全部通过:

> python myscript.py -h
usage: myscript.py [-h] [-a] [-b] [-c]

My desc

optional arguments:
-h, --help show this help message and exit
-a a help
> python myscript.py -a -c
> python myscript.py -a -b
> python myscript.py -b -c

我尝试将 mysub_group 更改为 add_mutually_exclusive_group 将所有内容变为互斥:

> python myscript.py -h
usage: myscript.py [-h] [-a | -b | -c]

My desc

optional arguments:
-h, --help show this help message and exit
-a a help
-b b help
-c c help

如何为 [-a | 添加参数? ([-b] [-c])]?

最佳答案

所以,这个问题已经被问过很多次了。简单的答案是“使用 argparse,你不能”。然而,这是简单的答案。您可以使用子解析器,因此:

import argparse
parser = argparse.ArgumentParser(description='My desc')
sub_parsers = parser.add_subparsers()
parser_a = sub_parsers.add_parser("a", help='a help')
parser_b = sub_parsers.add_parser("b", help='b help')
parser_b.add_argument("-c", dest='c', action='store_true',default=False,help='c help')
parser.parse_args()

然后你得到:

$ python parser -h
usage: parser [-h] {a,b} ...

My desc

positional arguments:
{a,b}
a a help
b b help

optional arguments:
-h, --help show this help message and exit

和:

$ python parser b -h
usage: parser b [-h] [-c]

optional arguments:
-h, --help show this help message and exit
-c c help

如果您更喜欢问题中所述的论点,请查看 docopt ,它看起来很可爱,应该完全符合您的要求。

关于python - 在组间使用互斥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16769409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com