itz*_*aki 9 python python-2.7 argparse
我试图在不同的组之间建立一个互斥的组:我有-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()
Run Code Online (Sandbox Code Playgroud)
解析不同的组合 - 全部通过:
> 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
Run Code Online (Sandbox Code Playgroud)
我试图改变的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
Run Code Online (Sandbox Code Playgroud)
如何为[-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()
Run Code Online (Sandbox Code Playgroud)
然后你会得到:
$ 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
Run Code Online (Sandbox Code Playgroud)
和:
$ python parser b -h
usage: parser b [-h] [-c]
optional arguments:
-h, --help show this help message and exit
-c c help
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢问题中所述的论点,请查看docopt,它看起来很可爱,并且应该完全符合您的要求。
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |