我有一个带有多个子解析器的argparse
程序。如果未指定顶级参数的值,我希望它取决于子解析器的选择。这可以通过在每个子解析器上使用set_defaults()
来部分完成。但是,即使显式提供了顶级参数,传递的值也不像真正的默认值那样起作用。
我是否在argparse
模块中缺少某些东西,这些东西会允许特定于子解析器的默认值生成顶级解析器?下面是一个玩具示例,演示了我想要的用例
import argparse
# Top-level parser
parser = argparse.ArgumentParser()
parser.add_argument('-t','--time',type=str)
# Add subparsers with options
actions = parser.add_subparsers(dest='action',Metavar='action')
actions.required = True
eat = actions.add_parser('eat')
eat.add_argument('-f','--food',type=str,default='pizza')
order = actions.add_parser('order')
order.add_argument('-i','--item',type=int,required=True)
# Attempt to set main parser's --time depending on subparser selection
eat.set_defaults(time='Now')
order.set_defaults(time='later')
# Tests that work as expected
print(parser.parse_args(['order',0])) # Namespace(action='order',item=0,time='later')
print(parser.parse_args(['eat'])) # Namespace(action='eat',food='pizza',time='Now')
# Tests that DO NOT work
# Actual result: the --time flag of `parser` is ignored in preference of each subparser's default
# Desired result: explicit usage of --time should override the subparser defaults like the comments below
# Namespace(action='order',time='before')
# Namespace(action='eat',time='after')
print(parser.parse_args(['--time','before','order',0]))
print(parser.parse_args(['--time','after','eat']))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。