Python 命令行之旅 —— 深入 argparse (一)

Python 命令行之旅 —— 深入 argparse (一)


作者:HelloGitHub-Prodesire

HelloGitHub 的《讲解开源项目》系列,项目地址:https://github.com/HelloGitHub-Team/Article

前言

在第一篇“初探 argparse”的文章中,我们初步掌握了使用 argparse 的四部曲,对它有了一个基本的体感。
但是它具体支持哪些类型的参数?这些参数该如何配置?本文将带你深入了解 argparse 的参数们。

本系列文章默认使用 Python 3 作为解释器进行讲解。 若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~ 参数动作

你是否还记得?在上一篇四部曲中的第二步是定义参数,在这个步骤中,我们指定了 action 入参:

parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the nums (default: find the max)')

那么这里面的 action,也就是 参数动作,究竟是用来做什么的呢?

想象一下,当我们在命令行输入一串参数后,对于不同类型的参数是希望做不同的处理的。
那么 参数动作 其实就是告诉解析器,我们希望对应的参数该被如何处理。比如,参数值是该被存成一个值呢,还是追加到一个列表中?是当成布尔的 True 呢,还是 False?

参数动作 被分成了如下 8 个类别:

store —— 保存参数的值,这是默认的参数动作。它通常用于给一个参数指定值,如指定名字:

>>> parser.add_argument('--name') >>> parser.parse_args(['--name', 'Eric']) Namespace(name='Eric')

store_const —— 保存被 const 命名的固定值。当我们想通过是否给定参数来起到标志的作用,给定就取某个值,就可以使用该参数动作,如:

>>> parser.add_argument('--sum', action='store_const', const=sum) >>> parser.parse_args(['--sum']) Namespace(sum=<built-in function sum>) >>> parser.parse_args([]) Namespace(sum=None)

store_true 和 store_false —— 是 store_const 的特殊情况,用来分别保存 True 和 False。如果为指定参数,则其默认值分别为 False 和 True,如:

>>> parser.add_argument('--use', action='store_true') >>> parser.add_argument('--nouse', action='store_false') >>> parser.parse_args(['--use', '--nouse']) Namespace(nouse=False, use=True) >>> parser.parse_args([]) Namespace(nouse=True, use=False)

append —— 将参数值追加保存到一个列表中。它常常用于命令行中允许多个相同选项,如:

>>> parser.add_argument('--file', action='append') >>> parser.parse_args(['--file', 'f1', '--file', 'f2']) Namespace(file=['f1', 'f2'])

append_const —— 将 const 命名的固定值追加保存到一个列表中(const 的默认值为 None)。它常常用于将多个参数所对应的固定值都保存在同一个列表中,相应的需要 dest 入参来配合,以放在同一个列表中,如:

不指定 dest 入参,则固定值保存在以参数名命名的变量中

>>> parser.add_argument('--int', action='append_const', const=int) >>> parser.add_argument('--str', action='append_const', const=str) >>> parser.parse_args(['--int', '--str']) Namespace(int=[<class 'int'>], str=[<class 'str'>])

指定 dest 入参,则固定值保存在 dest 命名的变量中

>>> parser.add_argument('--int', dest='types', action='append_const', const=int) >>> parser.add_argument('--str', dest='types', action='append_const', const=str) >>> parser.parse_args(['--int', '--str']) Namespace(types=[<class 'int'>, <class 'str'>])

count —— 计算参数出现次数,如:

>>> parser.add_argument('--increase', '-i', action='count') >>> parser.parse_args(['--increas', '--increase']) Namespace(increase=2) >>>parser.parse_args(['-iii']) Namespace(increase=3)

help —— 打印解析器中所有选项和参数的完整帮助信息,然后退出。

version —— 打印命令行版本,通过指定 version 入参来指定版本,调用后退出。如:

>>> parser = argparse.ArgumentParser(prog='CMD') >>> parser.add_argument('--version', action='version', version='%(prog)s 1.0') >>> parser.parse_args(['--version']) CMD 1.0 参数类别

如果说 参数动作 定义了解析器在接收到参数后该如何处理参数,那么 参数类别 就是告诉解析器这个参数的元信息,也就是参数是什么样的。比如,参数是字符串呢?还是布尔类型呢?参数是在几个值中可选的呢?还是可以给定值,等等。

下面,我们将逐一介绍不同类型的参数。

可选参数

可选参数 顾名思义就是参数是可以加上,或不加上。默认情况下,通过 ArgumentParser.add_argument 添加的参数就是可选参数。

我们可以通过 - 来指定短参数,也就是名称短的参数;也可以通过 -- 来指定长参数,也就是名称长的参数。当然也可以两个都指定。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppdfj.html