Python 进阶(十九):解析命令行参数(argparse 模块)

news2024/10/5 9:48:23

在这里插入图片描述

大家好,我是水滴~~

当处理命令行参数时,Python 的 argparse 模块是一个强大而灵活的工具。它提供了一个简单且一致的方式来定义命令行参数、选项和子命令,并帮助你解析和验证用户提供的输入。本教程将详细介绍 argparse 模块的使用方法和常见用例。

文章中包含大量的示例代码,希望能够帮助新手同学快速入门。

本文收录于《Python入门核心技术》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。

文章目录

  • 前言
  • 一、使用 argparse 模块
    • 1.1 引入 argparse 模块
    • 1.2 创建参数解析器
    • 1.3 添加命令行参数
    • 1.4 解析命令行参数
    • 1.5 获取参数值
  • 二、各类参数实例
    • 2.1 添加位置参数
    • 2.2 添加可选参数
    • 2.3 添加行为参数
    • 2.4 添加短参数
  • 三、查看帮助信息
  • 总结


前言

在开发命令行工具或需要从命令行接收用户输入的 Python 程序中,处理命令行参数是一项常见任务。为了简化这一过程,Python 提供了 argparse 模块,它能够帮助我们定义和解析命令行参数,并提供用户友好的命令行界面。本教程将详细介绍 argparse 模块的使用方法和常见用例,帮助你轻松处理命令行参数,提升程序的灵活性和易用性。

一、使用 argparse 模块

1.1 引入 argparse 模块

由于argparse 模块是 Python 标准库中自带的模块,所以不需要安装,使用导入即可。

下面代码使用 import 来导入 argparse 模块:

import argparse

1.2 创建参数解析器

在开始定义命令行参数之前,我们需要创建一个参数解析器对象。可以使用 ArgumentParser 类创建解析器。

如下代码:

parser = argparse.ArgumentParser(description='这是一个命令行参数示例')

上面代码创建了一个新的 ArgumentParser 参数解析器对象,为其名为 parser ,并传递了一个可选的 description参数,用于描述你的程序或命令行工具的功能。

ArgumentParser 类还有很多可选的参数供我们使用,下面列出这些参数以及功能描述:

  • prog - 程序的名称 (默认值: os.path.basename(sys.argv[0]))
  • usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
  • description - 要在参数帮助信息之前显示的文本(默认:无文本)
  • epilog - 要在参数帮助信息之后显示的文本(默认:无文本)
  • parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
  • formatter_class - 用于自定义帮助文档输出格式的类
  • prefix_chars - 可选参数的前缀字符集合(默认值: ‘-’)
  • fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None
  • argument_default - 参数的全局默认值(默认值: None
  • conflict_handler - 解决冲突选项的策略(通常是不必要的)
  • add_help - 为解析器添加一个 -h/--help 选项(默认值: True
  • allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True
  • exit_on_error - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)

1.3 添加命令行参数

创建好参数解析器对象后,就可以使用 add_argument()方法来添加参数了。参数分好几种,在第二章我们详细介绍。

如下代码:

parser.add_argument('--arg1', type=str, help='参数1')
parser.add_argument('arg2', type=int, help='参数2')

上面代码中添加了两个参数:arg1arg2,并使用 type 参数指定数据类型,使用 help 参数添加该选项的功能描述。

add_argument()方法还有很多可选的参数供我们使用,下面列出这些参数以及功能描述:

  • name or flags - 一个命名或者一个选项字符串的列表,例如 foo-f, --foo
  • action - 当参数在命令行中出现时使用的动作基本类型,例如 store_true
  • nargs - 命令行参数应当消耗的数目。
  • const - 被一些 actionnargs 选择所需求的常数。
  • default - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。
  • type - 命令行参数应当被转换成的类型。
  • choices - 由允许作为参数的值组成的序列。
  • required - 此命令行选项是否可省略 (仅选项可用)。
  • help - 一个此选项作用的简单描述。
  • metavar - 在使用方法消息中使用的参数值示例。
  • dest - 被添加到 parse_args() 所返回对象上的属性名。

1.4 解析命令行参数

定义完命令行参数后,我们需要解析用户提供的命令行输入。使用 parse_args() 方法解析命令行参数:

args = parser.parse_args()

parse_args() 方法会解析命令行参数并返回一个 args 对象,其中包含了我们定义的参数的值。

1.5 获取参数值

通过 args 对象,我们可以获取用户提供的命令行参数的值,并在程序中进行相应的处理:

arg1_value = args.arg1
arg2_value = args.arg2

在上面的示例中,我们通过 args.arg1args.arg2来获取对应参数的值。

二、各类参数实例

在使用过程中,添加命令行参数的过程是多变的,下面我们通过一些实例来演示不同各类的参数的添加方法。

2.1 添加位置参数

位置参数是必需的参数,它们没有前缀,直接跟在命令行中的位置上。使用 add_argument() 方法添加位置参数。

创建一个 argparse_test.py Python程序,其如下代码:

import argparse

# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')

# 2.添加位置参数(positional arguments)
parser.add_argument('arg1', type=int, help='位置参数1')
parser.add_argument('arg2', type=str, help='位置参数2')

# 3.解析命令行参数
args = parser.parse_args()

# 4.获取并打印参数值
print(args)
print(args.arg1)
print(args.arg2)

add_argument() 方法接受一些参数,其中最重要的是参数的名称、类型和帮助信息。在上面的示例中,我们定义了两个位置参数 arg1arg2,一个是整数类型,一个是字符串类型,并提供了相应的帮助信息。

使用时,在命令行中 python .\argparse_test.py 10 ABC,其中 10 和 ABC 为位置参数。

$ python .\argparse_test.py 10 ABC
Namespace(arg1=10, arg2='ABC')
10
ABC

位置参数是必填的,否则会报错:

$ python .\argparse_test.py 10
usage: argparse_test.py [-h] arg1 arg2
argparse_test.py: error: the following arguments are required: arg2

2.2 添加可选参数

可选参数不是必需的,它们通常以双破折线 -- 作为前缀。使用 add_argument() 方法添加可选参数,还可以指定其默认值。

如下代码:

import argparse

# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')

# 2.添加位置参数(positional arguments)
parser.add_argument('--option1', type=str, help='可选参数1')
parser.add_argument('--option2', type=str, help='可选参数2', default='a')
parser.add_argument('--option3', type=str, help='可选参数3', default='a')

# 3.解析命令行参数
args = parser.parse_args()

# 4.获取并打印参数值
print(args)
print(args.option1)
print(args.option2)
print(args.option3)

在可选参数的定义中,我们使用了 --option1--option2--option3 作为参数名,并提供了相应的帮助信息,还设置了它们的数据类型,--option2--option3 还设置了默认值。

使用时,在命令行中输入 python .\argparse_test.py --option3=ABC,只为 --option3 指定了值 ABC,输出如下:

$ python .\argparse_test.py --option3=ABC  
Namespace(option1=None, option2='a', option3='ABC')
None
a
ABC

可以看出,option1 没有默认值,也没有输入值,其值为 Noneoption2 值为默认值 aoption3 值为输入值 ABC

2.3 添加行为参数

行为参数是一种特殊的可选参数,它只有两个值 TrueFalse,用于标记使用。只需要在 add_argument() 方法中添加 action 参数,并将值设为 store_true 即可。

如下代码:

import argparse

# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')

# 2.添加行为参数(action arguments)
parser.add_argument('--action1', action='store_true', help='行为参数1')
parser.add_argument('--action2', action='store_true', help='行为参数2')

# 3.解析命令行参数
args = parser.parse_args()

# 4.获取并打印参数值
print(args)
print(args.action1)
print(args.action2)

上面代码添加了两个行为参数:--action1--action2,都为它们指定了 action 参数值为 store_true

使用时,在命令行中输入 python .\argparse_test.py --action1,输入时无需指定参数的值,这里只指定了 --action1,输出如下:

$ python .\argparse_test.py --action1    
Namespace(action1=True, action2=False)
True
False

从输出结果可以看出,指定了的 --action1 值为 True,未指定的 --action2 值为 False

2.4 添加短参数

还可以添加短参数,使用一个-指定短参数,例如 '-f'。短参数可以独立使用,但我们通常和长参数共同使用:'-f', '--foo'

如下代码:

import argparse

# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')

# 2.添加短参数
parser.add_argument('-f', '--foo', type=str, help='短参数')

# 3.解析命令行参数
args = parser.parse_args()

# 4.获取并打印参数值
print(args)
print(args.foo)

这里需要说明一下,如果短参数和长参数同时指定,参数名为长参数的名字。

在使用时,可以通过 -f=ABC--foo=ABC 两个方式指定参数值:

$ python .\argparse_test.py -f=ABC
Namespace(foo='ABC')
ABC

$ python .\argparse_test.py --foo=ABC
Namespace(foo='ABC')
ABC

三、查看帮助信息

可以使用 -h--help来查看我们添加的参数信息。

下面是完整代码:

import argparse

# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')

# 2.添加位置参数(positional arguments)
parser.add_argument('arg1', type=int, help='位置参数1')
parser.add_argument('arg2', type=str, help='位置参数2')

# 2.添加可选参数(options arguments)
parser.add_argument('--option1', type=str, help='可选参数1')
parser.add_argument('--option2', type=str, help='可选参数2', default='a')
parser.add_argument('--option3', type=str, help='可选参数3', default='a')

# 2.添加行为参数(action arguments)
parser.add_argument('--action1', action='store_true', help='行为参数1')
parser.add_argument('--action2', action='store_true', help='行为参数2')

# 2.添加短参数
parser.add_argument('-f', '--foo', type=str, help='短参数')

# 3.解析命令行参数
args = parser.parse_args()

# 4.获取并打印参数值
print(args)

查看帮助信息:

$ python .\argparse_test.py --help
usage: argparse_test.py [-h] [--option1 OPTION1] [--option2 OPTION2] [--option3 OPTION3] [--action1] [--action2] [-f FOO] arg1 arg2

这是一个解析命令行参数示例

positional arguments:
  arg1               位置参数1
  arg2               位置参数2

options:
  -h, --help         show this help message and exit
  --option1 OPTION1  可选参数1
  --option2 OPTION2  可选参数2
  --option3 OPTION3  可选参数3
  --action1          行为参数1
  --action2          行为参数2
  -f FOO, --foo FOO  短参数

可以看出,帮助信息将我们添加的参数信息都输出了。

总结

argparse 模块是 Python 的一个标准库模块,用于处理命令行参数。通过 argparse,我们可以定义位置参数和可选参数,并指定它们的类型、帮助信息以及其他选项。模块还提供了命令行帮助信息的自动生成功能,能够帮助用户理解和正确使用程序。在本教程中,我们学习了如何使用 argparse 模块的基本功能,包括创建参数解析器、添加位置参数和可选参数、解析命令行参数以及获取参数值。我们还演示了一个完整的示例,并给出了一些常见的命令行命令和输出。通过掌握 argparse 模块,你可以更有效地处理命令行参数,提升程序的交互性和易用性,为用户提供更好的体验。祝你在开发命令行工具或处理命令行参数时取得成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1653431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.1 Java全栈开发前端+后端(全栈工程师进阶之路)-服务端框架-MyBatis框架-相信我看这一篇足够

0.软件框架技术简介 软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也 指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。 框架的功能类似于基础设…

环形链表问题详解

引言 环形链表的题大家都应该做过,如果没有做过可以去某扣上做一下 ,下面有传送门 141. 环形链表 - 力扣(LeetCode)https://leetcode.cn/problems/linked-list-cycle/submissions/530160081/ 正文 如果在面试的情况下出现了环形链表的题大…

阿里云VOD视频点播流程(1)

一、开通阿里云VOD 视频点播(ApsaraVideo VoD,简称VOD)是集视频采集、编辑、上传、媒体资源管理、自动化转码处理、视频审核分析、分发加速于一体的一站式音视频点播解决方案。登录阿里云,在产品找到视频点播VOD ,点击…

QT4-升级到QT5(1)

1.C报错汇总_nafxcwd.lib error lnk2001-CSDN博客1 1.QT3Support QWidget::setShown 改为QWidget::setVisible 2.头文件 #include<QWidget> 3.部分函数替换

Neo4j+LLM+RAG 环境配置报错处理

开发KGLLMRAG程序时遇到以下报错&#xff0c;记录下处理方案&#xff1a; ValueError: Could not use APOC procedures. Please ensure the APOC plugin is installed in Neo4j and that ‘apoc.meta.data()’ is allowed in Neo4j configuration 这个参考文章&#xff1a;link…

74从零开始学Java之排序算法中的冒泡和选择排序

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们要想成为一个优秀的程序员,其实非常关键的一点就是要锻炼培养自己的编程思维,就好比一个狙击手,要通过大量的射击训练要用大量的子弹喂出来。同样的…

【解决Android Studio】cmake报错找不到vulkan包

1 报错信息 CMake Error at D:/Android/project/cmake/3.10.2.4988404/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find Vulkan (missing: Vulkan_LIBRARY) Call Stack (most recent call first): 2. 错误原因 minSdk版本不对&am…

为什么创业青年,集体选择抖音小店?是藏在抖音里的财富密码!

哈喽~我是电商月月 为什么创业青年&#xff0c;集体选择抖音小店&#xff1f;因为在这开店不需要自己直播卖货做引流&#xff0c;也不需要自己手里有商品呀 是不是很匪夷所思&#xff0c;别怀疑&#xff0c;给我俩分钟你们绝对不后悔自己的停留&#xff01; 首先就是社会的现…

栈PART 1

目录 1. 栈 1.1 栈的概念和结构 1.2 栈的实现 1.2.1 栈的顺序储存结构 1.2.2 栈的基本操作 1.3 有效的括号 1. 栈 1.1 栈的概念和结构 堆栈又名栈&#xff08;stack&#xff09;&#xff0c;它是一种运算受限的线性表。 限定仅在表尾进行插入和删除操作的线性表。这一端…

3d中如何对模型粉碎处理?---模大狮模型网

在3D建模和动画设计中&#xff0c;模型粉碎处理是一种引人注目的效果&#xff0c;可以为场景增添动态和震撼的视觉效果。无论是用于电影特效、游戏设计还是虚拟现实项目&#xff0c;都可以通过模型粉碎处理来创造出引人入胜的场景。本文将介绍如何在3D中轻松实现模型粉碎处理&a…

FastText 算法原理及使用方法

文章目录 1. 前言2. 模型架构2.1 Hierarchical Softmax2.2 n-gram 特征 3. 训练及评估4. 使用5. 参考 1. 前言 FastText 是一个由 Facebook AI Research 在2016年开源的文本分类器&#xff0c;它的设计旨在保持高分类准确度的同时&#xff0c;显著提升训练和预测的速度。 论文…

Day_3

1. HttpClient HttpClient是Apache的一个子项目&#xff0c;是高效的、功能丰富的支持HTTP协议的客户端编程工具包 作用&#xff1a;发送HTTP请求&#xff0c; 接受相应数据 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>…

森林消防—高扬程水泵:守护绿色屏障的专业利器/恒峰智慧科技

在广袤的森林中&#xff0c;火灾无疑是最具破坏性的灾难之一。为了及时应对森林火灾&#xff0c;保护珍贵的自然资源和生态平衡&#xff0c;高效的消防设备显得尤为重要。森林消防高扬程水泵便是其中一款专业设备&#xff0c;以其高效输送水源的能力&#xff0c;成为守护森林绿…

【服务治理中间件】consul介绍和基本原理

目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理&#xff…

hexo 博客插入本地图片时遇到的坑

哈喽大家好&#xff0c;我是咸鱼。 最近一直在折腾博客的事&#xff0c;说是 hexo 极易上手&#xff0c;我觉得只仅限于在安装部署的时候&#xff0c;随着对 hexo 的深入使用&#xff0c;发现遇到的问题还是挺多的。 那今天来讲一下我在把本地图片插入到 hexo 博客文章中遇到…

网络安全之二层局域网封装及广域网封装详解

局域网封装&#xff1a;Ethernet2&#xff08;TCP/IP&#xff09;&#xff0c;IEEE802.3&#xff08;OSI&#xff09;&#xff08;前面文章中讲解了TCP、IP和OSI本文就不继续讲解&#xff1a;可以查看&#xff1a;网络安全之OSI七层模型详解-CSDN博客&#xff09; 广域网封装&…

SD-WAN大型企业异地组网与海外访问案例解析

随着大型企业不断扩张&#xff0c;其分公司遍布各地&#xff0c;但异地网络访问的瓶颈日益凸显。若企业还需依赖外网进行业务交流&#xff0c;那么合规、高效的SD-WAN组网方案便显得尤为重要。 客户概述&#xff1a; 该客户专注于无线通讯技术的研发与推广&#xff0c;拥有位于…

TL062CDR 贴片SOP-8 丝印TLO62C 双路通用运算放大器芯片

TL062CDR是一款非常通用的运算放大器&#xff0c;它可以被广泛应用在各种电子产品和系统中。以下是一些可能使用TL062CDR的具体产品类别和应用示例&#xff1a; 1. 模拟滤波器&#xff1a;在音频设备&#xff0c;如耳机放大器、音响系统和声音处理器中&#xff0c;TL062CDR可以…

对Windows超融合S2D的一些补充

先说一个不知道算不算BUG的例子&#xff0c;下面这个存储池是用两台服务器各2块10G建立的&#xff0c;除去系统保留的部分&#xff0c;显示还有13G可用。 但如果使用其新建虚拟磁盘会显示可用的空间为0 然后我又各增加了一块10G硬盘进池&#xff0c;变成了可用空间为30.5GB …

VM 安装Ubuntu20

1、VM 新建虚拟机 类型配置 - 典型 安装源选择 &#xff08;安装包获取&#xff1a;Ubuntu桌面系统 | Ubuntu&#xff09; 设置计算机名与用户账号密码 为虚拟机命一个名&#xff0c;设置虚拟机文件保存的位置 设置磁盘相关信息 最后一步&#xff0c;确定虚拟机的相关参数 设置…