python - 将 argparse 别名解析回原始命令
问题描述
我正在使用具有别名的子解析器/子命令。
我正在使用dest
子解析器的选项来存储子命令的名称,以便稍后获取。
目前,如果子命令的名称是reallyLongName
并且别名是r
(比如说),那么该dest
选项存储reallyLongName
或者 r
完全存储 - 我输入的任何内容都会被存储。这很烦人,因为我现在必须检查命令的名称或其任何别名才能识别命令。
有没有办法让 argparse 以dest
某种单一的规范文本字符串将子命令的名称存储在字段中?
例如,给定以下代码:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='command', help='sub-command help')
parser_ag = subparsers.add_parser( 'mySubcommand',
aliases=['m'],
help='Subcommand help')
print(parser.parse_args('mySubcommand'.split()))
print(parser.parse_args('m'.split()))
产生以下输出:
Namespace(command='mySubcommand')
Namespace(command='m')
期望的结果:command
两者都有一个单一的规范值,例如:
Namespace(command='mySubcommand')
Namespace(command='mySubcommand')
解决方案
有一个 Python 错误/问题要求这样做 - 保存“基本”名称,而不是别名。你不能在不改变argparse.py
代码的情况下改变它。我认为更改将仅限于Action
处理子解析器的子类。 https://bugs.python.org/issue36664
但我指出有更简单的方法来处理这个问题。只需按照https://docs.python.org/3/library/argparse.html#sub-commands部分set_defaults
末尾附近的说明使用。那里
parser_foo.set_defaults(func=foo)
用于设置子解析器特定的功能,但它也可以用于设置“基本”名称。
parser_foo.set_defaults(name='theIncrediblyLongAlias')
推荐阅读
- tsql - 你如何在sql server中实现关于历史的数据库?
- sql - SQL 我想在“-”之前选择那些字符。Ex ES123-224 将提供 ES123,RTE2345-34 将提供 RTE2345
- javascript - 在轻松自动完成时中止先前的 ajax 请求
- python - 为什么每次运行时函数的运行时间都会略有变化?
- swift - 在 ViewModel 中更新带有 RxSwift 的列表
- python - 你应该总是使用正则化张量流吗?
- javascript - Javascript Dom 表分页
- postgresql - 持久化 docker postgres 数据量,同时允许本地套接字访问(开发容器)
- .net - 如果我通过编程知道aws用户名和密码,如何获取访问密钥和秘密访问密钥
- ios - 崩溃 ERROR_CGDataProvider_BufferIsNotReadable + 16 仅适用于 iOS >= 11.3