【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 argparse

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

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

3.1 设置必需参数

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

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

import argparse

if __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 argparse

if __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 argparse

if __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 argparse

if __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 argparse

if __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 argparse

if __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 argparse

if __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.mfbz.cn/a/258614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

遇见小黄鸭——一年开出两千多家门店,疑似员工维权,拖欠薪资?

遇见小黄鸭 遇见小黄鸭(重庆)食品有限公司成立于2021年10月12日,注册地位于重庆市渝中区 法定代表人为袁林 实际隶属于重庆中润天泽科技(集团)有限公司 实体业崛起? 经过三年疫情的冲刷,实体…

亚信安慧AntDB:支撑中国广电5G业务的数据库之力

自2019年6月获得5G牌照以来,中国广电积极利用700MHz频谱资源,迅速崛起为第四大运营商,标志着其在数字通信领域取得的巨大成就。通过与中国移动紧密合作,共建共享基站已超过400万座,为实现自主运营和差异化竞争提供了坚…

游戏引擎?

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、…

【诊断】linux系统下的内存溢出问题定位

步骤: (1)编写并运行一个会造成内存溢出的代码: import java.util.HashMap; import java.util.concurrent.atomic.AtomicInteger;public class HeapLeakTest {static AtomicInteger i new AtomicInteger(1);public static void …

202. 快乐数(快慢指针)

对于任意n,可能出现以下几种情况: 最终会得到 1。 最终会进入循环。 值会越来越大,最后接近无穷大。 对于第三种情况,我们可以简单的列举一下: 会发现,13位数字的数位平方和最大是1053,1…

LeetCode刷题--- 子集

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题【 http://t.csdnimg.cn/yUl2I 】【C】 【 http://t.csdnimg.cn/6AbpV 】数据结构与算法【 http://t.csdnimg.cn/hKh2l 】 前言:这个专栏主要讲…

多对多关系通用操作组件,省时省力的神器

项目上有很多对多操作的场景,建对象,建mapper接口,设置查询条件,查询多对多数据等都是一项极为耗时耗力的工作。因此,搓了这款集建表-保存-查询-设置条件等操作于一体的组件。原理简单,利用$标签动态作些操…

25.BFD双向转发检查

BFD双向转发检查 链路故障检测工具,结合三层协议使故障检测更加快速 例如两台路由器之间加了一台二层设备 在修改优先级后,默认选择了下面那条优先级高的路由,R1 ping R2的时候是正常能ping通的 但是,当下面的路由出现故障后&a…

基于SpringBoot实现的社区人员管理系统

一、系统架构 前端:html | js | css | layui 后端:springboot | mybaits-plus | shiro 环境:jdk1.8 | mysql8 | maven 二、代码及数据库 三、功能介绍 01. 登录 02. 首页 03. 常规管理-住户模块-住户管理 04. 常规管理-住户模块-高危…

DevEco Studio Preview失败

安装DevEco Studio新建第一个项目后,点击Previewer预览失败,Preview failed Unable to start the previewer. Open PreviewerLog to check for details。 点击File->Settings->Build, Execution, Deployment->Build Tools->Hvigor&#xff…

音视频直播核心技术介绍

直播流程 采集: 是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。 前处理:主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…

任意文件下载漏洞的利用思考

0x01 前言 任意文件下载漏洞作为最常见的WEB漏洞之一,在平常的渗透测试中经常遇到,但是很多人却并没有深入去想该如何利用这种漏洞,导致忽略了一些细节的信息。 0x02 传统利用 1) 下载配置文件连数据库 通过任意文件下载漏洞下载网…

翻译: LLMs关于人工智能的担忧 Concerns about AI

在短时间内,获取生成人工智能的能力已经在全球范围内传播,使许多人能够生成高质量的文章、图片和音频。随着这些惊人的能力的出现,也带来了许多关于人工智能的担忧。我认为即使在生成人工智能兴起之前,我们就已经生活在许多焦虑之…

charles和谷歌浏览器在Mac上进行软件安装,桌面上会显示一个虚拟磁盘,关掉页面推出磁盘内容都消失掉了 需要再次安装问题解决

其他软件也会有这种情况,这里我们以charles为例。绿色背景的内容是重点步骤。 1.如图,我下载了一个charles一个版本的dmg文件。 2.打开后,选择Agree 3.桌面会出现一个磁盘和如下页面 4.错误操作------可以不看 直接看第5步正确操作 常规情…

为什么GRU和LSTM能够缓解梯度消失或梯度爆炸问题?

1、什么是梯度消失(gradient vanishing)? 参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。 2、什么是梯度爆炸(gradient exploding)? 参数更新过小大,破坏了…

亚马逊、沃尔玛、eBay:通过优化测评策略,提高店铺排名的秘诀

目前,亚马逊平台不仅考虑产品和店铺的排名,还会对产品列表进行排名。不同的排名有不同的影响因素。以下是亚马逊影响商品详情页排名的因素: 1.销售排行:卖家可以通过查看BSR榜单来了解自己的销售排名。销售排名反映了你的产品的销…

第二天使用seleninum创建创建员工

上一篇我们已经登录进了系统,下面看下怎么自动创建用户信息。 一:知识准备 创建用户前,我们学习下seleninum的页面元素获取和填写数据方法 send_keys 发送数据 find_element_by_xpath 通过xpath定位,这个上一节我们说过 二:查看页面结构 进入系统以后,我们要做的…

27.BGP边界网关路由协议

BGP边界网关路由协议 外部网关路由协议 ospf能承载的路由条目有限 用在运营商与运营商之间,国与国之间 BGP运行在IGP之上(内部网关路由) IGP都是在物理链路上直连的基础之上才能建立邻居关系,BGP可以跨路由器建立邻居关系&…

做一个类似东郊到家系统需要哪些功能?

随着移动互联网的普及,越来越多的人开始通过手机预约按摩服务。按摩预约小程序,作为一种方便快捷的预约方式,让用户可以随时随地预约按摩服务。那么,按摩预约小程序的开发周期是多长呢?它又有哪些功能呢?本…

死锁产生的条件是什么???如何进行死锁判断???

死锁是指两个或多个线程相互等待对方释放所持有的资源,导致程序无法继续执行的情况。死锁产生的条件是: 互斥条件:至少有一个资源必须处于非分享状态,即一次只能被一个线程占用。占有且等待条件:线程持有至少一个资源…