我在 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
,但没有“|”或 ']' 代表该组。使用格式化程序没有嵌套组的概念。它只是尝试格式化 3 个组,尽管它们是独立的。
但是您可以编写自己的用法行。
这种嵌套更有意义,因为g
是一个argument_group
。然后,这些操作将被放置在一个不同的帮助组中。这两种组在功能上有很大不同。
http://bugs.python.org/issue17218使用此功能将mutual_exclusive_group 嵌套在argument_group 中,以向MXG 添加“标题”和“描述”。有一个例子是 argparse 单元测试文件 Lib/test/test_argparse.py
。
关于python - 是否可以使用 argparse (Python) 在另一个组内创建一个互斥组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23292325/