我创建了下一个"父母"解析器:
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)的参数显示在&#34;可选参数&#34;部分。为什么?这是一个错误吗?或者我做错了什么?
更新
我为此问题创建了一个错误:http://bugs.python.org/issue25882。 对于我的简单代码及其输出,请参阅此错误。
答案 0 :(得分:1)
parent_parser
可以按照您的意愿行事,但如果用作parents
则不会。
如果我添加到您的代码中(更正使用parser
):
parent_parser.print_help()
print('-------------')
parser=argparse.ArgumentParser(parents=[parent_parser])
parser.print_help()
我得到(在所有版本中)
1317:~/mypy$ python3.5 stack34308904.py
usage: stack34308904.py [-l FILE] [-c] [-v | -q]
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
-------------
usage: stack34308904.py [-h] [-l FILE] [-c] [-v | -q]
optional arguments:
-h, --help show this help message and exit
-v, --verbose print logs verbosity
-q, --quiet suppress every normal output
global arguments:
-l FILE, --log-file FILE
set log file (default no log)
-c, --clear-log clear log file before logging
从'_add_container_actions'方法(将组和参数从父级复制到子级)的方法中的注释显而易见,开发人员预测了在argument_group中嵌入了mutual_exclusive_group但尚未尝试过的情况让它正常工作。
最简单的立即修复是跳过parents
位,只需在主解析器中定义组和参数即可。 parents
在某些情况下是方便的(在其他情况下是令人讨厌的),但很少需要。
现在有一个错误/问题;
暂定修正是添加2行
argparse._ActionsContainer._add_container_actions
....
# add container's mutually exclusive groups
# NOTE: if add_mutually_exclusive_group ever gains title= and
# description= then this code will need to be expanded as above
for group in container._mutually_exclusive_groups:
#print('container title',group._container.title)
mutex_group = self.add_mutually_exclusive_group(
required=group.required)
# new lines - updates the `_container attribute of the new mx group
mx_container = title_group_map[group._container.title]
mutex_group._container = mx_container
http://bugs.python.org/issue25882 - 猴子补丁文件问题。