首页 > 解决方案 > 使用 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输出的最常见方式,还是通常如何完成?

标签: pythonpython-3.xargparse

解决方案


每个参数都执行某种动作,由 的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'

推荐阅读