python – 是否可以只使用argparse解析一个参数组的参数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 是否可以只使用argparse解析一个参数组的参数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2709字,纯文字阅读大概需要4分钟。
内容图文
![python – 是否可以只使用argparse解析一个参数组的参数?](/upload/InfoBanner/zyjiaocheng/699/3fa60866890b45f5912a452936fc0658.jpg)
我想做这样的事情:
parser = argparse.ArgumentParser()
group1 = parser.add_argument_group('group1')
group1.add_argument('--test1', help="test1")
group2 = parser.add_argument_group('group2')
group2.add_argument('--test2', help="test2")
group1_args = group1.parse_args()
group2_args = group2.parse_args()
但是,我收到以下错误:
Traceback (most recent call last):
File "test.py", line 19, in <module>
group1_args = group1.parse_args()
AttributeError: '_ArgumentGroup' object has no attribute 'parse_args'
有没有办法只获取一个参数组的参数?
解决方法:
正如您的错误消息所示,ArgumentGroup不是解析器,特别是它没有parse_args方法.
ArgumentParser对象和ArgumentGroup对象共享一个基础ArgumentContainer类,为其提供add_argument等方法.但是ArgumentParser有很多额外的代码. ArgumentGroup实际上只是帮助格式化帮助.它不会以任何方式影响解析.
为了增加混淆,一个mutual_exclusive_group子类是ArgumentGroup,但只影响帮助的使用部分,并通过引发错误消息来影响解析.
如果你详细说明为什么要这样做,我们可以提出一些可行的替代方案.例如,有一个父机制,允许您将一个解析器插入另一个解析器.或者通过’command’参数将解析控制传递给subparsers的subparsers.
https://docs.python.org/3/library/argparse.html#parents
在自己的父解析器中定义每个组,可以让您控制帮助显示和解析.只有父母的问题是你必须在某个级别使用help = False来防止重复-h选项.
您可能还需要使用parse_known_args,因此“组”解析器不会抱怨它无法识别的参数.
这是一种显示所有args条目的方法,按参数组分组.我包括2个默认组,选项和位置.它确实利用了解析器的“私有”属性.这样做有一点风险,但这不是未来补丁中可能会改变的事情.
import argparse
parser = argparse.ArgumentParser()
group1 = parser.add_argument_group('group1')
group1.add_argument('--test1', help="test1")
group2 = parser.add_argument_group('group2')
group2.add_argument('--test2', help="test2")
args = parser.parse_args('--test1 one --test2 two'.split())
print([g.title for g in parser._action_groups]) # all group titles
print(group1._group_actions) # arguments/actions of `group1`
print([a.dest for a in group2._group_actions]) # actions for group2
for group in parser._action_groups:
group_dict={a.dest:getattr(args,a.dest,None) for a in group._group_actions}
print(group.title, argparse.Namespace(**group_dict))
生产
1513:~/mypy$python stack31519997.py
['positional arguments', 'optional arguments', 'group1', 'group2']
[_StoreAction(option_strings=['--test1'], dest='test1', nargs=None, const=None, default=None, type=None, choices=None, help='test1', metavar=None)]
['test2']
('positional arguments', Namespace())
('optional arguments', Namespace(help=None))
('group1', Namespace(test1='one'))
('group2', Namespace(test2='two'))
如果可以更方便地使用vars(args),字典版本. argparse.Namespace(** adict)从字典重新创建命名空间.
粗略的你制作自己的目标列表,[‘test1’]和[‘test2’].
内容总结
以上是互联网集市为您收集整理的python – 是否可以只使用argparse解析一个参数组的参数?全部内容,希望文章能够帮你解决python – 是否可以只使用argparse解析一个参数组的参数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。