python - 是否可以使用 argparse (Python) 在另一个组内创建一个互斥组?

标签 python argparse

我在 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]

g1g2 可以在另一个组 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/

相关文章:

python - 格式化按两列分组的 Pandas 数据系列,并在第三列用字典的平均值重新采样

python - 无法在 Python 中加载以前转储的大型 pickle 文件

python - 获取其他模块中 tkinter 实例的参数

python - 将 argparse 上的空字符串替换为 None

json - Python 错误 : argument -c/--conf is required

python - 子命令中选项的 argparse 冲突解决程序将关键字参数转换为位置参数

python - 如何在 Python 中编写具有不同参数的同名方法

python - 如何在 anaconda 中将 pip 版本从 10.0.1 升级到 18.0?

python - 如何区分argparse,python中的默认值和用户给定值?

Python - docopt 和 argparse 之间的区别