python - 修改现有的 argparse 解析器 - 具体来说,删除位置
问题描述
对于我来说,编写命令行程序是很常见的,这些程序依赖于另一个已经定义的处理,并对行为进行了一些调整。
当需要添加参数时,我可能会执行以下操作:
@classmethod
def modify_parser(cls, parser):
dest="node"
default="root"
parser.add_argument(
"--" + dest,
action="store",
help="%s node to list[%s]" % (dest,default)
)
我不是在编写子命令,我只是在现有解析器中添加一个选项。工作正常。
好的,但是假设我想删除一个选项。让我们看看下面的 argparse 帮助信息:
usage: test_dumper3.py [-h]
[--Database DBNAME]
config [recname [recname ...]]
dump out tables
positional arguments:
config config file <<<< I DONT WANT THIS!
recname <<<< because this replaces it
....
这是我的第一次尝试:
@classmethod
def modify_parser(cls, parser):
dest="recname"
parser.add_argument(
dest,
nargs="*",
action="store",
help=dest
)
parser._positionals._remove_action("config")
我明白了ValueError('list.remove(x): x not in list',)
。
我猜你需要传入 argparse.Action 实例来删除,而不是它的名称。有什么地方可以查到吗?像action_to_delete = parser.get_action('config')
然后parser._positionals._remove_action(action_to_delete)
?
我真的不介意与_
私有属性相关的风险,只是尝试使用 argparse。
解决方案
推荐阅读
- c++ - 强制转换后无法访问 constexpr CRTP 类的成员函数
- python-3.x - TkInter - 无法让帧正常工作并调整大小
- asp.net-mvc - 正在更新用户模型中的单个属性,即余额属性,
- react-native - 使用自定义排序并将 Track Scores 设置为 True 仍将分数显示为 null
- sql - 合并2张表并获取每月最后一条记录
- service-broker - 单个消息卡在传输队列中
- python - If 语句来感知变量是否包含某些字符串将不起作用
- angular - 禁止使用“<>”进行类型断言,改用“as”?
- java - 无法修复多对多关系上的延迟加载
- python - Autopep8 和预提交不遵守 --global-config