【python之argparse模块学习】简单入门
目录
- 0 前言
- 1 入门程序
- 2 参数
- 2.1 位置参数
- 2.2 可选参数
- 2.3 矛盾选项
- 3 总结
- 4 参考文献
0 前言
- 该模块地位: Python 标准库中推荐的命令行解析模块。
- 类比linux命令
ls
来理解该模块功能。与该命令类似的,如果程序需要用户输入指定的参数参与运行,可以用 argparse 模块来实现。ls
是一个即使在运行的时候没有提供任何选项,也非常有用的命令。在默认情况下他会输出当前文件夹包含的文件和文件夹。ls 指定目录
会输出指定文件夹包含的文件和文件夹。ls -l
会输出文件和文件夹的详细参数。
1 入门程序
- 让我们从一个简单到(几乎)什么也做不了的例子开始,该程序文件名为 prog.py。
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
- 在该文件所在路径打开cmd命令窗口,执行不同参数的语句结果如下。
$ python3 prog.py$ python3 prog.py --help
usage: prog.py [-h]
options:-h, --help show this help message and exit$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
- 程序运行情况如下:
- 在没有任何选项的情况下运行脚本不会在标准输出显示任何内容。这没有什么用处。
- 第二行代码开始展现出 argparse 模块的作用。我们几乎什么也没有做,但已经得到一条很好的帮助信息。
- –help 选项,也可缩写为 -h,是唯一一个可以直接使用的选项(即不需要指定该选项的内容)。指定任何内容都会导致错误。即便如此,我们也能直接得到一条有用的用法信息。
2 参数
- 作用:使用者调用程序时,在前端输入的信息。
- 分类:
- 位置参数:必须传参,传参不用指定参数名。
- 可选参数:可以不传参,传参是需要指定参数名。
2.1 位置参数
- 位置参数,就像其命名一样,前端将参数按位置顺序传递给程序,不用指定参数名。
- 为了让程序能更加人性化,可以对参数进行处理,指定“help”、“type”等方法进行处理。
- “help”:能让程序使用者调用帮助命令时,用于介绍选项的作用。
- “type”:程序选项在接收前端输入时,默认格式为字符串,该参数用于指定数据格式。如果输入的字符串能转换为指定的数据格式,则正常转换,如果转换失败,则报错。
- 程序示例:
- 下面的程序用于接收使用者输入的数据,并输入该数据的平方回显到命令行。
- 第二行,创建一个新的 ArgumentParser 对象。
- 第三行,新增选项并赋予参数。argparse对象新增一个选项square,该选项赋予两个参数,help参数填写了选项“square”的用途,type参数执行了将输入转换为整型。
- 第四行,返回带有成员的命名空间,可以使用
.
来访问里面的每一个选项。 - 第五行,使用对应的选项内容进行计算,并打印结果。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
args = parser.parse_args()
print(args.square**2)
- 将上述程序存入名为test.py的文件中,在cmd窗口调用,输入不同数据执行结果如下:
- 当没有输入参数时,会报错,因为选项square是位置参数,是必须输入的。
- 当输入数字4时,成功返回计算结果。
- 当输入字符串four时,程序执行出错,提示需要输入数字。
- 不同输入参数名,不然会被当做输入给参数的字符串去执行。
- 参看该程序的帮助命令,可以看到该程序有位置参数和可选参数两类。
$ python test.py
usage: test.py [-h] square
test.py: error: the following arguments are required: square$ python test.py 4
16$ python test.py four
usage: test.py [-h] square
test.py: error: argument square: invalid int value: 'four'$ python test.py square 4
usage: test.py [-h] square
test.py: error: argument square: invalid int value: 'square'$ python test.py -h
usage: test.py [-h] square
positional arguments:square display a square of a given number
optional arguments:-h, --help show this help message and exit
2.2 可选参数
- 有一些参数不是程序执行所必须的,或者是可以设置默认的,可以将其设置为可选参数来参与程序运行。
- 在上述程序的基础上进行优化,示例如下:
- 第4行,添加一个可选参数 “–verbosity”,用 “-” 开头的表示可选参数,两杠表示长参数,一杠表示短参数。
- 第6-9行,根据可选参数判断是要输出完整信息还是简要信息。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:print("the square of " + str(args.square) + " is " + str(args.square**2))
else:print(args.square**2)
- 输入不同参数执行如下:
- 给参数 verbosity 传参为1,回显详细输出内容。
- 不调用参数 verbosity ,回显简要输出内容。
- 当调用参数 verbosity 又不传参时,程序出错,应为该参数还没设置默认参数。
- 参看帮助,有两个可选参数分别是 help 和 verbosity 。
$ python test.py 4 --verbosity 1 # 效果等同 python test.py --verbosity 1 4
the square of 4 is 16$ python test.py 4
16$ python test.py 4 --verbosity
usage: test.py [-h] [--verbosity VERBOSITY] square
test.py: error: argument --verbosity: expected one argument$ python test.py -h
usage: test.py [-h] [--verbosity VERBOSITY] square
positional arguments:square display a square of a given number
optional arguments:-h, --help show this help message and exit--verbosity VERBOSITYincrease output verbosity
- 程序优化。
- 根据上述程序,可选参数的功能仅是对输出内容完整输出还是简要输出的控制,这一选项更多地是一个标志,而非需要接受一个值的什么东西。
- 指定选项 verbose 关键词 action赋值为 “store_true”。这意味着,当这一选项存在时,为 args.verbose 赋值为 True。没有指定时则隐含地赋值为 False。
- 新增短选项,为选项同时命名为"-v", “–verbose”,两者皆可启用该参数。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
parser.add_argument("-v", "--verbose", help="increase output verbosity",action="store_true")
args = parser.parse_args()
if args.verbose:print("the square of " + str(args.square) + " is " + str(args.square**2))
else:print(args.square**2)
- 输入不同参数执行如下:调用参数 -v ,无需传参,更符合该参数对应功能的使用习惯。
$ python test.py -v 4
the square of 4 is 16$ python test.py 4 -v
the square of 4 is 16
2.3 矛盾选项
argparse.ArgumentParser
实例的第三个方法add_mutually_exclusive_group()
。 它允许我们指定彼此相互冲突的选项。 让我们再更改程序的其余部分以便使用新功能更有意义。- 比如,我们将引入 --quiet 选项,它将与 --verbose 正好相反:
- 引入一组互相冲突的选项,命名为 group,在该组中添加相互矛盾的选项。
- 扩展程序功能,能计算 x 的 y 次方,程序需要接收 x 和 y 两个参数。
import argparseparser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.yif args.quiet:print(answer)
elif args.verbose:print(f"{args.x} to the power {args.y} equals {answer}")
else:print(f"{args.x}^{args.y} == {answer}")
- 输入不同参数,程序执行如下:
- x 和 y 是位置参数,需要按程序的顺序输入,x在前,y在后。
- 可以启用参数q或v来控制输出内容的完整程度。
- 同时启用参数 q 和 v,程序会报错。
$ python test.py 4 2
4^2 == 16$ python test.py -q 4 2
16$ python test.py -v 4 2
4 to the power 2 equals 16$ python test.py -v -q 4 2
usage: test.py [-h] [-v | -q] x y
test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose$ python test.py -vq 4 2
usage: test.py [-h] [-v | -q] x y
test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
3 总结
- 本文章作为简单的入门指引,能简单熟悉argprase模块的功能。
- 对于 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)
- 对于 add_argument() 方法,还有以下关键字:
- name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
- action - 当参数在命令行中出现时使用的动作基本类型。
- nargs - 命令行参数应当消耗的数目。
- const - 被一些 action 和 nargs 选择所需求的常数。
- default - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。
- type - 命令行参数应当被转换成的类型。
- choices - 可用的参数的容器。
- required - 此命令行选项是否可省略 (仅选项可用)。
- help - 一个此选项作用的简单描述。
- metavar - 在使用方法消息中使用的参数值示例。
- dest - 被添加到 parse_args() 所返回对象上的属性名。
- 更多方法的使用见文末官方文档。
4 参考文献
- argparse官方文档——入门介绍
- argparse官方文档
【python之argparse模块学习】简单入门相关推荐
- 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- python中confIgparser模块学习
python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...
- python的argparse模块
使用步骤: 1:import argparse #导入argparse模块 2:parser = argparse.ArgumentParser() #创建实例 3:par ...
- python之wxpython模块学习
python之wxpython模块学习 wxPython简介 创建一个GUI程序 wxPython简介 wxPython 是一个用于 wxWidgets (用C ++编写)的Python包装器,这是一 ...
- python之Argparse模块
argparse 模块可以轻松编写用户友好的命令行接口.程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数. argparse 模块还会自动生成帮助和使用手册 ...
- python(十四)--Django学习快速入门
Django学习快速入门 1. 预备知识 1.1 什么是http协议 1.2 MVC模式和MTV模式 1.2.1 MVC 模式 1.2.2 MTV 模式 2. Django框架介绍 2.1 什么是框架 ...
- python自学argparse模块
argparse模块 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块 使用步骤 import argparse # 导入模块,这个没什么说的 ...
- Python之argparse模块的使用
我们在写python脚本的时候,有时候需要在运行的时候传入参数,而不是写死在程序里,这个时候就要用到argparse模块.argparse 是 Python 内置的一个用于命令项选项与参数解析的模块, ...
- python中argparse模块关于 parse_args() 函数详解(全)
目录 前言 1. 函数讲解 2. 基本用法 3. 实战讲解 前言 原理:命令行解析使用argparse包 作用:命令行传参赋值 可用在机器学习深度学习 或者 脚本运行等 了解这个函数需要了解其背后的原 ...
最新文章
- Android Studio 工具栏消失了 设置回来
- 2019年上半年收集到的人工智能集成学习干货文章
- pip install 另一个程序正在使用此文件,进程无法访问
- java流方式接收pdf_java – 在Itext 7中,如何获取范围流来签署pdf?
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...
- put url带参数_避免自己写的 url 被diss!建议看看这篇RESTful API简明教程!
- appium--每次启动会重新安装的问题(没试过)
- Java EE 6 VS Spring 3:Java EE已经杀死了Spring? 没门!
- 挑选出tensor中等于0的索引_Pytorch中的5个非常有用的张量操作
- 【报告分享】新基建风口下,零售科技企业如何借势发展.pdf(附下载链接)
- 数据挖掘实践(金融风控)——task4:建模调参
- 笨方法学Python-1
- 爬虫:财政部PPP项目库
- android partition tool apk,分区修复工具 MiniTool Partition Recovery
- acs代表什么_思科的ACS是什么?
- 博客园页面定制html代码,博客园代码定制
- 通过Linux shell实现的花生壳动态域名解析(DDNS)
- 用GPS模块校准系统时间
- python可以用del释放资源_如何销毁Python对象并释放内存
- h5网页检测手机是否安装了app。
热门文章
- 分众传媒天天挂在嘴边的“饱和攻击”,原来只是最强话术
- [ArcGIS] 空间分析(零)分类图
- Leetcode.1079 活字印刷
- Android 代码操控手机粘贴板(复制到/获取)
- P(NIPAM-co-AdMA)/PtBMA-b-PNIPAM聚(甲基)丙烯酸叔丁酯-b-聚(N-异丙基丙烯酰胺)
- 神经网络实现鸢尾花分类
- 硬盘电路板损坏故障数据如何修复?
- Android 8.0 系统编译解决卡在Ensuring Jack server is installed and started
- Uber系统架构设计
- 怎么给pdf文件添加水印