【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.hqwc.cn/news/289160.html

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

相关文章

第三节TypeScript 基础类型

1、typescript的基础类型 如下表: 数据类型 关键字 描述 任意类型 any 生命any的变量可以赋值任意类型的值 数字类型 number 整数或分数 字符串类型 string 使用单引号(‘’)或者双引号(“”)来表示字符串…

随时爆雷!2023年四大“安全债”

即将过去的2023年,网络安全、云安全、应用安全、数据安全领域暴露的诸多“安全债”中,有四大债务不但未能充分缓解,反而有在新的一年“爆雷”的风险。这四大债务分别是:Logj4漏洞、HTTP/2快速重置攻击漏洞、恶意电子邮件和后量子加…

智能优化算法应用:基于野狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于野狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于野狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.野狗算法4.实验参数设定5.算法结果6.参考文献7.MA…

windows远程桌面怎么开启?

文章目录 如下三种开启方式,任选一即可方式1.在系统属性中开启远程桌面方式2.通过系统设置开启远程桌面方式3.注册表编辑器开启远程桌面使用远程桌面 如下三种开启方式,任选一即可 配合 组网工具或者内网穿透 超级爽 局域网其他pc如何访问宿主机虚拟机IP…

YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)

一、本文介绍 本文给大家带来的改进机制是HAttention注意力机制,混合注意力变换器(HAT)的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意力关注于识别哪些通道更重要,而自注意力则关注于图…

用友crm客户关系管理pub/help2.php接口存在任意文件读取漏洞 附POC

@[toc] 用友crm客户关系管理pub/help2.php接口存在任意文件读取漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文…

DriveWorks Solo捕获参数(三)

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

学习使用echarts图表中formatter的用法,格式化数字金额,控制x轴、y轴展示长度

学习使用echarts图表中formatter的用法,格式化数字金额,控制x轴、y轴展示长度 控制金额长度两位小数,并去除多余.00效果图 控制文字长度完整代码 控制金额长度 series: [{name: ,type: bar,sort: none,label: { //饼图图形上的文本…

【Python炫酷系列】祝考研的友友们金榜题名吖(完整代码)

文章目录 环境需求完整代码详细分析系列文章环境需求 python3.11.4及以上版本PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.…

Spring MVC 原理(四)

Spring MVC 原理 Spring 的模型-视图-控制器(MVC)框架是围绕一个 DispatcherServlet 来设计的,这个 Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文…

stack刷题

最小栈 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部…

uint29传输格式

前言 不知道谁想出来的。 反正我是想不到。 我看网上也没人讲这个。 写篇博客帮一下素未谋面的网友。 uint29 本质上是网络传输的时候,借用至多4字节Bytes,表达29位的无符号整数。 读8位数字,判断小于128? 是的话,返回末7位…