我在Python中使用 argparse ,我需要在控制台中执行此操作:
python3 my_program.py (-a | -b) | (-c | -d)
我读了几个论坛,我猜答案是否定的,但以防万一。有可能吗?
答案 0 :(得分:1)
你不必接受任何人的话 - 试试吧。
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
,但没有' |'或者']'为那个小组。使用格式化程序没有嵌套组的概念。虽然它们是独立的,但它只是尝试格式化3组。
但你可以写自己的用法线。
这种嵌套更有意义g
是argument_group
。然后,操作将放在不同的帮助组中。两种群体功能完全不同。
http://bugs.python.org/issue17218使用此功能在argument_group中嵌套一个mutual_exclusive_group,以添加一个'标题'和'描述'到MXG。这是argparse单元测试文件Lib/test/test_argparse.py
的一个例子。