【发布时间】:2015-12-17 14:56:41
【问题描述】:
我创建了下一个“父”解析器:
parent_parser = argparse.ArgumentParser(add_help=False)
base_group = parser.add_argument_group(title = "global arguments")
base_group.add_argument("-l", "--log-file", metavar="FILE", help="set log file (default no log)")
base_group.add_argument("-c", "--clear-log", action="store_true", default=False, help="clear log file before logging")
mutex_group = base_group.add_mutually_exclusive_group()
mutex_group.add_argument("-v", "--verbose", action="store_true", default=False, help="print logs verbosity")
mutex_group.add_argument("-q", "--quiet", action="store_true", default=False, help="suppress every normal output")
如果我在另一个解析器中使用这个解析器作为父解析器,那么我希望在下一个帮助中看到:
usage: my_program.py [-h] [-l FILE] [-c] [-v | -q ] [<the parent arguments ...>] Desc... optional arguments: <the my_program.py arguments> global arguments: -l FILE, --log-file FILE set log file (default no log) -c, --clear-log clear log file before logging -v, --verbose print logs verbosity -q, --quiet suppress every normal output
但不幸的是,来自互斥组的参数(-v 和 -q)显示在“可选参数”部分。为什么?它是一个错误吗?还是我做错了什么?
更新:
我为这个问题创建了一个错误:http://bugs.python.org/issue25882。 请参阅此错误了解我的简单代码及其在这种情况下的输出。
【问题讨论】:
-
互斥参数组未命名,它们始终显示在其父组中(此处为“全局参数”)(例如,参见this中的输出
-
@hlt 但在这种情况下,父组是“base_group”,不是吗?
-
我想你误会了我:)。我的问题中的输出对我来说是一个很好的解决方案,但事实并非如此。 -v 和 -q 显示在子解析器参数显示的“可选参数”部分。我想如果 -v 和 -q 可以在“全局参数”中看到,父解析器的参数是什么。
-
它适用于我 2.7.9... 奇数。
-
我的python版本是2.7.3,也许这是一个错误...我会尝试在python的检查日志中检查它,谢谢检查@hlt
标签: python python-2.7 argparse