【python】程序运行添加命令行参数argparse模块用法详解

Python标准库之argparse,详解如何创建一个ArgumentParser对象及使用

  • 一. argparse介绍
  • 二. 使用步骤及参数介绍
  • 三. 具体使用
    • 3.1 设置必需参数
    • 3.2 传一个参数
    • 3.3 传多个参数
    • 3.4 位置参数和可选参数
    • 3.5 参数设置默认值
    • 3.6 其它用法

在这里插入图片描述

一. argparse介绍

 很多时候,我们的程序要带参数来运行不同的功能,需要解析命令行参数。argparse模块能够很好的提供支持。

argparse是 python 自带的命令行参数解析包,用于解析命令行参数的标准模块。可以让人轻松编写用户友好的命令行接口,还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

二. 使用步骤及参数介绍

argparse模块的使用可以简化成下面四个步骤:

1)import argparse 导入模块

2)parser = argparse.ArgumentParser() 创建一个解析对象(命令行解析器)
  ArgumentParser对象的相关属性,全部参数:
  在这里插入图片描述

3)parser.add_argument() 向该对象中添加要关注的命令行参数和选项,每一个add_argument方法对应一个要关注的参数或选项;
  add_argument相关属性,全部参数:

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

4)parser.parse_args() 调用parse_args()方法进行解析
  parse_args相关属性,全部参数:

属性解释默认值
args要解析的字符串列表从 sys.argv 获取。
namespace用于获取属性的对象一个新的空 Namespace 对象。

三. 具体使用

add_argument() 方法必须知道它是否是一个选项,例如 -f 或 --foo,或是一个位置参数。

第一个传递给 add_argument() 的参数必须是一系列旗标或者是一个简单的参数名。

当 parse_args() 被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数。

-(横杠)和 (双横杠)都是用来表示命令行参数的前缀符号:
-用来表示短参数(Short options),通常只有一个字符。
–用来表示长参数(Long options),通常是一个单词或短语。

在argparse中,-和–可以用来定义命令行参数的简写和全名,例如:parser.add_argument(‘-n’, ‘–name’, help=‘输入姓名’)

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('-n', '--name', help='输入姓名')args = parser.parse_args()# 获得传入的参数print(args)

带参执行结果:
在这里插入图片描述

3.1 设置必需参数

add_argument方法的required参数可以设置该参数是否是必需。

如果该参数设置为必需参数,程序执行时未指定该参数会报错!

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--name', help='输入姓名', required=True)parser.parse_args()# 获得传入的参数print(args)# 获得指定的参数print(args.name)

运行 python test.py 和 python test.py --name Elaine
结果:
在这里插入图片描述


3.2 传一个参数

add_argument添加一个参数选项

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--name', help='输入姓名')args = parser.parse_args()# 获得传入的参数print(args)# 获得指定的参数print(args.name)

运行程序 -h 看一下效果

D:\>python test.py -h
usage: test.py [-h] [--name NAME]optional arguments:-h, --help   show this help message and exit--name NAME  输入姓名

带一个参数和带三个参数运行的结果:
在这里插入图片描述
可以看到,这种情形下传入三个参数会报错!

3.3 传多个参数

1)add_argument加上nargs参数,nargs是用来说明传入的参数个数,例如:

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--name', nargs=3, help='输入姓名')args = parser.parse_args()# 获得传入的参数print(args)# 获得指定的参数print(args.name)

运行 python test.py --name Elaine 和 python test.py --name Elaine Elaine1 Elaine2
结果:
在这里插入图片描述

2)nargs为’+’ 表示传入至少一个参数,可以不用指定具体多少个参数,例如:

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--name', nargs='+', help='输入姓名')args = parser.parse_args()# 获得传入的参数print(args)# 获得指定的参数print(args.name)

运行 python test.py --name Elaine 和 python test.py --name Elaine Elaine1 Elaine2
结果:
在这里插入图片描述

3.4 位置参数和可选参数

add_argument() 方法必须知道它是否是一个选项,例如 -f 或 --foo,或是一个位置参数。
第一个传递给 add_argument() 的参数必须是一系列旗标或者是一个简单的参数名。
当 parse_args() 被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数。
1)位置参数
add_argument第一个参数可以这么创建:parser.add_argument(‘name’, help=‘输入姓名’)
其中第一个参数可以是任何参数名,但前面不要加 - (横杠)或 (双横杠)
这些参数是不带前缀的参数,它们通常用于需要按特定顺序提供的参数,且通常是必需的。

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser(description='命令行中传入一个参数')parser.add_argument('name', help='输入姓名')parser.add_argument('country', help='国家')args = parser.parse_args()# 获得传入的参数print(args)

执行 python test.py Elaine China 和 python test.py China Elaine
结果:
在这里插入图片描述
所以位置参数都是顺序的,在命令行中传入参数时候,传入的参数的先后顺序不同,运行结果往往会不同!

执行 python test.py Elaine 时缺少第二个位置参数会报错,所以位置参数通常是必须的。例如:
在这里插入图片描述

2)可选参数
为了在命令行中避免上述位置参数的顺序混乱,可以使用可选参数。这个很像关键词传参,但是需要在关键词前面加-
例如:

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--name', nargs='+', help='输入姓名')parser.add_argument('--country', nargs='+', help='国家名称')args = parser.parse_args()# 获得传入的参数print(args)

执行 python test.py --name Elaine Elaine1 Elaine2 和 python test.py --name Elaine Elaine1 Elaine2 --country China
结果:
在这里插入图片描述
可选参数虽然写法比较繁琐,但是增加了命令行中的可读性,不容易因为参数传入顺序导致数据错乱。

3.5 参数设置默认值

add_argument加上default参数

import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('-n', '--name', help='输入姓名')parser.add_argument('-c', '--country', default='China', help='国家名称')args = parser.parse_args()# 获得传入的参数print(args)

运行python test.py --name Elaine 和 python test.py
结果:
在这里插入图片描述

3.6 其它用法

想要了解更多,可以去看看官方文档
参考官方文档:https://docs.python.org/zh-cn/3.9/library/argparse.html#parents

在这里插入图片描述

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

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

相关文章

Amazon CodeWhisperer 在 vscode 的应用

文章作者:旧花阴 CodeWhisperer 是一款可以帮助程序员更快、更安全地编写代码的工具,可以在他们的开发环境中实时提供代码建议和推荐。亚马逊云科技发布的这款代码生成工具 CodeWhisperer 最大的优势就是对于个人用户免费。以在 vscode 为例,演示安装过程…

LeetCode 1901. 寻找峰值 II:二分查找

【LetMeFly】1901.寻找峰值 II:二分查找 力扣题目链接:https://leetcode.cn/problems/find-a-peak-element-ii/ 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c…

【漏洞复现】CVE-2023-6895 IP网络对讲广播系统远程命令执行

漏洞描述 杭州海康威视数字技术有限公司IP网络对讲广播系统。 海康威视对讲广播系统3.0.3_20201113_RELEASE(HIK)存在漏洞。它已被宣布为关键。该漏洞影响文件/php/ping.php 的未知代码。使用输入 netstat -ano 操作参数 jsondata[ip] 会导致 os 命令注入。 开发语言:PHP 开…

原子学习笔记3——使用tslib库

一、tslib介绍 tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库,并且是开源。 tslib 为触摸屏驱动和应用层之间的适配层,它把应用程序中读取触摸屏 struct input_event 类型数据(这是输入设备上报给应用层的原始数据)并进行…

2023-2024-2Java面向对象程序设计-阶段性测试2

填空题(总分:10.00) 1、Java程序中使用【 import 】关键字导入外部的包。 2、使用【 final 】关键字声明的类不能有子类。 4、JVM是【 Java Virtual Machine 】的英文简写。 5、面向对象编程思想的三个特性是【封装】、【继承】、【多态】。 …

数据分析师的职业规划与参考资料

数据分析师如何规划 参考:超详细的数据分析职业规划 一个产品的出现可以从业务和技术两个方向分析,业务需求技术支持产品的出现。 如果把职业也当成一个产品,也有类似的分析, 其中业务也就是领域,即这个业务领域的特点…

Power BI案例-医院数据集的仪表盘制作

数据集描述 医生数据集doctor 医生编号是唯一的,名称会存在重复 医疗项目数据projects 病例编号是唯一的,注意这个日期编号不是真正的日期。 日期数据date 这里的日期编号对应医疗项目数据中的日期编号 科室数据集Department 维度表 采购成本事实表…

知乎上高频提问:Redis到底是单线程还是多线程程序?

1.概述 这里我们先给出问题的全面回答:Redis到底是多线程还是单线程程序要看是针对哪个功能而言,对于核心业务功能部分(命令操作处理数据),Redis是单线程的,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff…

海康rtsp拉流,rtmp推流,nginx部署转flv集成

海康rtsp拉流,rtmp推流,nginx部署转flv集成 项目实际使用并测试经正式使用无问题,有问题欢迎评论留言 核心后台java代码: try {// FFmpeg命令String command "ffmpeg -re -i my_video.mp4 -c copy -f flv rtmp://localho…

[学习笔记]批量迁移数据库文件

拷贝数据库文件 首先在本地运行如下SQL语句,查看数据库文件的磁盘位置 SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files默认是保存在C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA目录下 首先复制数据…

Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

目录 一、ansible概述 1、简介 2、Ansible主要功能: 3、Ansible的另一个特点:所有模块都是幂等性 4、Ansible的优点: 5、Ansible的四大组件: 二、ansible环境部署: 1、环境: 2、安装ansible&#…

浅析RoPE旋转位置编码的远程衰减特性

为什么 θ i \theta_i θi​的取值会造成远程衰减性 旋转位置编码的出发点为&#xff1a;通过绝对位置编码的方式实现相对位置编码。 对词向量 q \boldsymbol{q} q添加绝对位置信息 m m m&#xff0c;希望找到一种函数 f f f&#xff0c;使得&#xff1a; < f ( q , m ) …

MySQL数据库——SQL语法

Structured Query Language&#xff08;结构化查询语言&#xff09;&#xff0c;简称SQL&#xff0c;是用于操作关系型数据库的标准编程语言。SQL提供了一种与数据库交互的方式&#xff0c;可以用于查询、插入、更新和删除数据库中的数据。 1. SQL通用语法 SQL语句可以写在一…

持续集成交付CICD:K8S 手动完成前端项目应用发布与回滚

目录 一、实验 1.环境 2.Harbor查看镜像与连接K8S节点 3.K8S集群部署 nginx-ingress-controller 4. Jenkins 通过GitLab共享库 实现前端项目镜像构建 5.K8S node节点拉取镜像 6.K8S master节点更新部署文件 7.前端项目应用回滚 一、实验 1.环境 &#xff08;1&#x…

Android 架构 - 组件化

一、概念 组件化是对单个功能进行开发&#xff0c;使得功能可以复用。将多个功能组合起来就是一个业务模块&#xff0c;因此去除了模块间的耦合&#xff0c;使得按业务划分的模块成了可单独运行的业务组件。&#xff08;一定程度上的独立&#xff0c;还是依附于整个项目中&…

EXCEL VLOOKUP函数

参考资料 Excel&#xff1a;史上最全的VLOOKUP应用教程VLOOKUP函数最全面最详细的讲解大全&#xff0c;涵盖17个重要和常见用法&#xff01; 目录 零. 前提条件一. 单条件查找1.1 顺向查找1.2 逆向查找 二. 多条件查找2.1 顺向查找2.2 逆向查找 三. 根据条件查询等级四. 交差查…

RHCE8 资料整理(十一)

RHCE8 资料整理 第 32 章 控制语句32.1 判断语句 when32.1.1 when 判断中>、<、!和的使用32.1.2 when 判断中 in的用法32.1.3 when 判断中 is的用法 32.2 判断语句 block-rescue32.3 循环语句 第 32 章 控制语句 一个play中可以包含多个task&#xff0c;如果不想所有的t…

DriveWorks Solo捕获参数(三)

捕获参数 - 木门和矩形窗 木质门 下一个组件是木门本身。除了尺寸之外&#xff0c;门还具有需要控制的功能。 让我们首先捕获尺寸。 通过单击“捕获资源管理器”中的标题来激活“捕获的模型”部分。 双击任务窗格树中的模型木门以在 SOLIDWORKS 中将其打开。捕获以下尺寸。…

多维时序 | MATLAB实现WOA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现WOA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现WOA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-CNN-LST…

零基础也能制作家装预约咨询小程序

近年来&#xff0c;随着互联网的快速发展&#xff0c;越来越多的消费者倾向于使用手机进行购物和咨询。然而&#xff0c;许多家装实体店却发现自己的客流量越来越少&#xff0c;急需一种新的方式来吸引顾客。而开发家装预约咨询小程序则成为了一种利用互联网技术来解决这一问题…