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

在这里插入图片描述

大家好,我是水滴~~

当处理命令行参数时,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               位置参数1arg2               位置参数2options:-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.mzph.cn/diannao/8329.shtml

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

相关文章

Ansys电力变压器解决方案

电力变压器设计挑战 目前面临的挑战: 1、磁场 • 非线性材料 • 涡流电流 • 磁场随时间的变化 • 瞬态激励源下的磁场变化 • 空间磁场分布 2、电场 • 介电常数的变化 • 电极的尺寸和形状 • 空间电场分布 变压器的两个类别 变压器可以分为两类进行F…

springboot项目中引入Xxl-Job并部署和使用

目录 模块划分 配置调度中心 配置执行器 添加执行器 写一个简单的定时任务 XxlJobHelper xxl-job是分布式任务调度平台,部署为独立的调度服务平台 github地址:xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度…

视频怎么去水印?这三款工具助你轻松搞定

在视频处理的过程中,水印常常成为我们的一大难题。它不仅影响了视频的美观度,还可能涉及版权问题。那么,如何高效去除视频中的水印呢?接下来,我将为大家推荐三款国内外备受好评的视频去水印工具:水印云、In…

Jmeter性能测试(五)

一、Jmeter参数化常用方式 1、CSV 数据文件设置 2、查询数据库(JDBC Connection Configuration) 二、CSV 数据文件设置 1、准备一个txt文件(不需要写表头,直接写你要用的数据就行了,多个字段用英文逗号隔开) 2、添加一个CSV 数据文件设置(放全局最上…

RabbitMQ基础入门

初识MQ 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同…

栈的2道面试题【有效的括号】【用栈实现队列】

栈的面试题: 1.有效的括号 题目: 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合…

560. 和为 K 的子数组 974. 和可被 K 整除的子数组 【前缀和】

题目链接 ​​​​​​​974. 和可被 K 整除的子数组 560. 和为 K 的子数组 今天刷题的时候,刷了这两题,感觉挺有意思的。代码写起来挺简单的,但是思路和其中的细节以及涉及到的知识点确实让我挺意外的。这里写个博客解析一波,也是…

Python自动化下载指定公开页面文件

示例代码如下,但你拿到本地之需要做两件事才能运行 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time# 设置Se…

计算机组成原理(超详解!!) 第七节 中央处理器(上)

1.CPU的功能和组成 CPU的功能: 指令控制:程序的顺序控制。 操作控制:管理并产生每条指令的操作信号,并把它们送到相应部件,控制这些部件按要求进行动作。 时间控制:对各种操作实施…

Day_3

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

controlnet的preprocessor类型

GitHub - huggingface/controlnet_auxContribute to huggingface/controlnet_aux development by creating an account on GitHub.https://github.com/huggingface/controlnet_aux/https://huggingface.co/lllyasviel/sd_control_collection

智慧监控 高效运维

随着企业IT建设的不断深入和完善&#xff0c;IT管理的重要性逐渐被重视&#xff0c;打通数据割裂&#xff0c;使业务更加充分融合。亟需一套统一的平台来实现跨品牌跨设备类型的集中监控和管理。 LinkSLA带外监控平台&#xff0c;不仅适用于大规模或超大规模的运维场景&#x…

Spring MVC(一)

1 Spring MVC概述 我们在之前学习Servlet的时候&#xff0c;认识了在WEB开发中MVC设计模式&#xff0c;其最为经典的设计就是&#xff0c;通过控制器&#xff08;Controller&#xff09;分离模型&#xff08;Model&#xff09;和视图&#xff08;View&#xff09;。在具体的WEB…

Redis进阶学习

Redis进阶学习 一、Redis事务1.2 Redis监控1.3 Jedis连接1.4 SpringBoot整合1.5 自定义RedisTemple1.6 Redis.conf详解 二、 Redis持久化2.1 RDB2.2 AOF进程 三、Redis发布订阅3.1 Redis主从复制3.2 集群环境配置3.3、复制原理3.4、宕机后主动变为主机3.5、哨兵模式 四、Redis缓…

2024年大数据与艺术设计国际学术会议(ICBDAD 2024)

2024年大数据与艺术设计国际学术会议(ICBDAD 2024) 2024 International Conference on Big Data and Art Design 一、【会议简介】 2024年大数据与艺术设计国际学术会议&#xff0c;听起来好像两个完全不相关的领域&#xff0c;却意外地融合在了一起。 在这个会议上&#xff0c…

el-carousel走马灯页数回到第一页

我的走马灯是在一个弹窗里,包裹着一些button,切换到下一页时 关闭弹窗再打开弹窗还显示的是上次第二页位置 领导很不满意 1. 2.写在你打开弹窗或者关闭弹窗的位置 this.$refs.carousel && (this.$refs.carousel.activeIndex 0); 解释一下: this.$refs.carousel: thi…

开源数据可视化大屏对接表单数据实践!

如果你需要一个表单系统&#xff0c;进行数据收集&#xff1b;可以使用tduck填鸭进行私有化部署&#xff0c;进行表单制作&#xff0c;完成数据收集。 在实际业务中&#xff0c;往往需要将收集的数据进行展示或分析&#xff1b;此时就可以使用表单数据推送到TReport中&#xf…

华为eNSP中型企业局域网网络规划设计(下)

→b站传送门&#xff0c;感谢大佬← →华为eNSP中型企业局域网网络规划设计&#xff08;上&#xff09;← →拓扑图传送门&#xff0c;可以自己配置着玩← 配置ospf AR3 [AR3]ospf 1 router-id 3.3.3.3 //出口默认路由 [AR3-ospf-1]default-route-advertise always #area…

R语言数据探索与分析-中国GDP回归分析与预测

首先读取数据&#xff1a; 将GDP列转换为常规数字格式 # 可视化GDP数据 # 查看数据结构 # 确保数据类型是正确的 第一张图片展示了中国2002年到2021年间的GDP增长趋势&#xff0c;这是一个时间序列图&#xff0c;其中横轴表示年份&#xff0c;纵轴表示GDP&#xff08;单位未…

OpenAI 高管:一年后,你会觉得现在的 ChatGPT 像笑话一样糟糕|TodayAI

OpenAI 的首席运营官 Brad Lightcap 表示&#xff0c;一年后&#xff0c;你会觉得现在的 ChatGPT 像笑话一样糟糕。未来的 ChatGPT 版本将会有重大升级。他还讨论了 AI 取代人类工作和对电网的压力的可能性。 虽然我们不知道 OpenAI 何时会推出 GPT-5&#xff0c;但公司高管已…