【发布时间】:2018-11-16 06:16:52
【问题描述】:
有没有办法将来自父解析器的参数分组到不同的组中?我无权访问父解析器本身,所以我不能在那里添加组。 (我使用的是 Google 的 OAuth2 框架)。
目前我的代码是:
# test.py
from argparse import ArgumentParser
from oauth2client import tools
parser = ArgumentParser(description="My program", parents=[tools.argparser])
parser.add_argument("--foo", help="Foo the data")
parser.add_argument("--bar", help="Bar the data")
parser.parse_args()
这会产生以下帮助:
$ python test.py -h
usage: test.py [-h] [--auth_host_name AUTH_HOST_NAME]
[--noauth_local_webserver]
[--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]]
[--logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
[--foo FOO] [--bar BAR]
My program
optional arguments:
-h, --help show this help message and exit
--auth_host_name AUTH_HOST_NAME
Hostname when running a local web server.
--noauth_local_webserver
Do not run a local web server.
--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]
Port web server should listen on.
--logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Set the logging level of detail.
--foo FOO Foo the data
--bar BAR Bar the data
所以,我想为来自父解析器的参数创建一个组。是否可以将参数分组为如下所示?
optional arguments:
-h, --help show this help message and exit
--foo FOO Foo the data
--bar BAR Bar the data
authentication options:
--auth_host_name AUTH_HOST_NAME
Hostname when running a local web server.
--noauth_local_webserver
Do not run a local web server.
--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]
Port web server should listen on.
--logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Set the logging level of detail.
我知道解析器组,但我需要以某种方式将参数从一个地方传递到另一个地方,例如:
auth_group = parser.add_argument_group('authentication options')
for arg in get_args_from_parser(tools.argparser):
auth_group.add_argument(arg)
但我找不到一种方法来列出这样的参数或将它们从一个地方复制到另一个地方。
【问题讨论】:
-
你试过
add_argument_group吗?阅读它的文档并尝试一下。 stackoverflow.com/questions/39047075/… -
这些组的问题是您创建了组,然后将参数添加到组,而不是直接添加到解析器。所以我需要(以某种方式)将参数从父解析器移到这个新组中。 AFAIK 没有办法从一个解析器获取参数并将它们添加到另一个解析器。我会把它添加到描述中。
-
那么我的链接比我想象的更相关。所有操作都在
parser和现有参数组之一中。有 2 个默认组。请参阅parser._action_groups。该链接讨论了重新排序组的显示,但您也可以重命名一个组,并且(我认为)将一个动作从一个组移动到另一个组。这是 Python。对象及其属性通常是可访问的,即使它们的名称中有_。 -
啊,我明白了!谢谢!这有一些副作用,但这是可以预料的,因为它没有使用公共属性。如果我可以创建一个干净的示例,我会将其添加为答案。
标签: python argparse python-3.7