来自子解析器的顶级解析器上的Python argparse set_defaults

我有一个带有多个子解析器的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']))

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...