我在Python中使用argparse,需要在控制台中执行此操作:
python3 my_program.py (-a | -b) | (-c | -d)
我看了几个论坛,我想答案是否定的,只是以防万一。有可能吗?
你不必相信任何人的话-试试看。
import argparse
parser=argparse.ArgumentParser()
g = parser.add_mutually_exclusive_group()
g1 = g.add_mutually_exclusive_group()
g1.add_argument('-a')
g1.add_argument('-b')
g2 = g.add_mutually_exclusive_group()
g2.add_argument('-c')
g2.add_argument('-d')
print [a.dest for a in g._group_actions]
print [a.dest for a in g1._group_actions]
print [a.dest for a in g2._group_actions]
parser.print_help()
生产:
['a', 'b', 'c', 'd'] # actions in group g
['a', 'b']
['c', 'd']
usage: stack23292325.py [-h] [[-a A | -b B] [-c C | -d D]
g1
和g2
可以定义在另一组g
中,但网络效应使其4个动作互斥。如果你仔细想想,这在逻辑上是正确的。
用法行不太正确。第一个"["来自g
,但该组没有"|"或"]"。用法格式化程序没有嵌套组的概念。它只是试图将这三个小组格式化,尽管它们是独立的。
但是你可以写你自己的用法行。
这种嵌套更有意义,因为g
是argument_group
。然后,这些操作将被放置在一个不同的帮助组中。这两种群体在功能上截然不同。
http://bugs.python.org/issue17218使用此功能在argument_group中嵌套一个互斥组,以向MXG添加"title"one_answers"description"。有一个这样的例子,argparse单元测试文件Lib/test/test_argparse.py
。