python - 使用 argparse 解析值的最常见方法
问题描述
在使用argparse
这是我第一次遇到“命名空间”对象。使用这些对象的最常见方法是什么?例如,如果我有这个初始化代码:
import argparse
parser = argparse.ArgumentParser(description='Dedupe library.', allow_abbrev=True)
parser.add_argument( '-a', '--all', nargs='+', type=int, help='(Optional) Enter one or more IDs.')
parser.add_argument( '-r', '--reverse', nargs='+', help='(Optional) Enter one or more IDs.')
似乎该库在每个--long
选项上都添加了一个属性(如果存在,则为短-s
选项),因此类似于以下内容:
# test.py
p = parser.parse_args()
print (p.all, p.reverse)
# -------------------------------------
$ python test.py -a 2 3 -r asdf
# [2, 3] ['asdf']
这是处理argparse
输出的最常见方式,还是通常如何完成?
解决方案
每个参数都执行某种动作,由 的action
参数指定add_argument
。默认是一个store
动作。
每个store
操作都会将一个(或多个)值保存到结果命名空间中的一个属性中。dest
您可以使用 的参数指定哪个属性add_argument
,但更常见的是从第一个长选项名称(或第一个短名称,如果没有长名称)推断名称。
请注意,您可以有多个影响同一属性的选项。一个常见的用途是有多个store_const
操作,将不同的硬编码值保存到单个属性。
p.add_argument("--high", action='store_const', dest='level', const='high')
p.add_argument("--med", action='store_const', dest='level', const='medium')
p.add_argument("--low", action='store_const', dest='level', const='low')
您可以将其视为为采用显式参数指定级别的选项提供一系列别名:
p.add_argument("--level", choices=['high', 'medium', low'])
其中--high
与 具有相同的效果--level high
。
>>> p.parse_args(["--level", "high"]).level
'high'
>>> p.parse_args(["--high"]).level
'high'
推荐阅读
- javascript - 将数据从 vue-select 发送到另一个对象
- reactjs - 未处理的拒绝(TypeError):无法获取,使用 Node.js 进行 REST
- gps - SIM868 GPS 快速修复与 EPO 文件
- css - React Framer-motion:尝试基于向后或向前导航添加动画
- npm - ni-comps react npm install 失败并出现错误无法解决依赖关系:来自@xsite-ui/gaming.pgr.exit-popup@1.0.4 的 peer react@"^17.0.2"
- c++ - 使用数组在C++中查找二叉树中的离开节点数的问题
- flutter - 如何将原生android的livedata返回到flutter?
- git-rebase - 如何修复突然因错误而损坏的 gitk:无法读取“arcnos()”:数组中没有这样的元素
- html - 隐藏导航栏元素并使用 ejs 调出注销按钮
- javascript - fetch 中的错误处理:如何防止 .then 在慢速网络中在 .catch 之后被调用?