python之argparse模块使用(有实例)

声明:本文章是根据网上资料,加上自己整理和理解而成,仅为记录自己学习的点点滴滴。可能有错误,欢迎大家指正。

1、argparse是什么

argparse是python中的一个常用模块,是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。

argparse和sys.argv()功能类似,主要用于编写命令行接口:对于程序所需要的参数,它可以进行正确的解析。此外,argparse可以自动的生成help(帮助)和usage(用法)信息,当程序的参数无效时,可以自动生成错误信息。

sys.argv()能应付简单的参数,但参数稍微复杂点,解析起来就非常麻烦,这时可用argparse库。

详情可见:官方资料:argparse --- 命令行选项、参数和子命令解析器

2、argparse实例

argparse使用需要三个步骤:

  1. 创建一个解析器——创建 ArgumentParser() 对象。
  2. 添加参数——调用 add_argument() 方法添加参数。
  3. 解析参数——使用 parse_args() 解析添加的参数。

下面先引入一个例子,新建test.py文件,来看一个最简单的argsparse库的使用的例子:传入一个身高的数值:

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
#type是要传入的参数的数据类型  help是该参数的提示信息
parser.add_argument('height', type=int, help='身高')

args = parser.parse_args()

#获得传入的参数
print(args)

可以将test.py 文件直接拉到命令窗口,然后输入python test.py 3 ,其中3为输入的身高的值

接着,我们对这个示例进行解读。

(1)在创建自己的解析器之前,需要将argparse模块导入进来:
import argparse

import 的使用详见:import 和form import 区别-CSDN博客

(2)创建一个解析器

ArgumentParser对象包含将命令行解析成 Python 数据类型所需的全部信息。

description用于描述该参数解析器的作用,在命令行加 '-h' 显示帮助信息时可以看到description描述的信息。

(3)添加参数:

通过调用add_argument()方法给一个解析器添加程序参数信息。通常,这些调用指定解析如何获取命令行字符串并将其转换为对象。这些信息在调用parse_args()时会被存储和使用。

parser.add_argument('height', type=int, help='身高')
(4)解析参数

调用parse_args()将返回一个具有height属性的对象。height属性为一个整数。我们不必捕获异常,parse_args()非常方便的一点在于,如果参数有问题,则它打印出错误信息后,结束进程;如果参数是-h,则它打印帮助信息后,结束进程。只有当参数全部有效时,才会返回一个NameSpace对象,获取对应的参数就把参数名当作属性获取,非常方便。可见,使用argparse后,解析参数的工作被大大简化了,我们可以专注于定义参数,然后直接获取到有效的参数输入。

args = parser.parse_args()
print(args)

在运行代码python test_argparse.py后输入高度3,这样就能在不修改代码的前提下得到想要的结果:此时输出:Namespace(height=3).

其实得到的这个结果Namespace(height=3)是一种类似于python字典的数据类型。

我们可以使用 arg.参数名来提取这个参数,如:print(args.height)

在脚本中,parse_args()通常不带参数调用,ArgumentParser将自动从sys.argv确定命令行参数。

(5) 使用选择型参数

如果想改变输入参数的顺序或在输入参数同时携带参数名,可以使用选择型参数,在添加参数时参数名前加两个"-",即将height改为“--height”,也可以使用default设置默认值,即如果命令行中没有传入该参数的值,程序使用默认值。如果命令行传入该参数,则程序使用传入的值。下面设置身高的默认值为5:

parser.add_argument('--height', type=int, default=5, help='身高')

直接运行:

也可以通过修改身高

还有一种方法,通过“-”加上参数别名的形式,注意被" --"修饰的参数名必须存在

parser.add_argument('-H','--height', type=int, default=5, help='身高')

其中,H 是height的别名,--height不可省略

(6)传入多个参数

现在在命令行中给test.py 传入多个参数,例如传入5,8,9,44四个数字

从结果可以看出:不能识别8 9 44,看源代码我们知道height这个参数是位置参数,说明第一个数5是能识别。这里需要用nargs用来说明传入的参数的个数,可以是

  • 具体数字:要传进来几个
  • ‘*’:任意个 any
  • ‘?’:一个或者没有 1/0
  • ‘+’:至少一个 ≥1

后期你调出这个参数的时候,它是一个list的形式储存你传入的东西。这里我们需要重新更改test.py代码,添加:

nargs='+',

nargs是用来说明传入的参数个数,'+' 表示传入至少一个参数。这时候再重新在命令行中运行:

3.argparse三个主要函数

(1)parser=argparse.ArgumentParser()

ArgumentParser对象保存了所有必须的信息,用于将命令行参数解析为相应的python数据类型。
ArgumentParse对象:

class argparse.ArgumentParser(
prog=None,        #程序的名称 (默认值: os.path.basename(sys.argv[0]))
usage=None,       #描述程序用途的字符串(默认值:从添加到解析器的参数生成)
description=None, #要在参数帮助信息之前显示的文本(默认:无文本)
epilog=None,      #要在参数帮助信息之后显示的文本(默认:无文本)
parents=[],       #一个 ArgumentParser 对象的列表,它们的参数也应包含在内
 formatter_class=argparse.HelpFormatter, #用于自定义帮助文档输出格式的类
prefix_chars='-',  #可选参数的前缀字符集合(默认值: '-')
 fromfile_prefix_chars=None,  #当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None)
argument_default=None, #参数的全局默认值(默认值: None)
conflict_handler='error', #解决冲突选项的策略(通常是不必要的)
add_help=True,     #为解析器添加一个 -h/--help 选项(默认值: True)
allow_abbrev=True, #如果缩写是无歧义的,则允许缩写长选项 (默认值:True)
exit_on_error=True)#决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)

(2)parser.add_argument()

add_argument()函数是向ArgumentParser对象添加命令行参数信息,这些信息告诉ArgumentParser对象如何处理命令行参数。可以通过调用parse_agrs()来使用这些命令行参数,将会返回一个对象。

ArgumentParser.add_argument(
name or flags,#一个命名或者一个选项字符串的列表,如 foo 或 -f, --foo:带有--的为可选参数(optional parameter);带-为可选参数的别名,不带--的为必选参数(positional parameter)
action,#参数的处理方法,在命令行遇到此参数时要采取的基本操作类型
nargs,#参数的数量,应该使用的命令行参数的数量
const,#参数的常量值,被一些 action 和 nargs 选择所需求的常数。
default,#参数的默认值,如果命令行不存在的参数,则生成的值
type,#参数的数据类型,应转换命令行参数类型
choices,#参数的取值范围,参数允许值的范围
requires,#参数是否可以忽略不写(仅选项可用),True:不可忽略,false:可忽略
help,#参数的说明信息,简单描述参数的作用
metavar,#参数在说明信息usage(用法)中的名称,用法消息中的名称
dest#对象的属性名, 被添加到 parse_args() 所返回对象上的属性名。
)

(3)args = parser.parse_args()

通过调用parse_args()函数来解析ArgumentParser对象中保存的命令行参数:将命令行参数解析成相应的数据类型并采取相应的动作,返回一个Namespace对象。

#将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。
ArgumentParser.parse_args(
args=None,     #要解析的字符串列表。 默认值是从 sys.argv 获取。
namespace=None #用于获取属性的对象。 默认值是一个新的空 Namespace 对象。
)
  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值