python笔记:argparse模块

Python的argparse模块用于解析命令行参数和选项。它内置在Python中,使用包括创建ArgumentParser对象、添加参数、解析参数等步骤。ArgumentParser的构造函数接受description、epilog等参数,而add_argument()用于定义参数,支持位置参数、可选参数,以及多种action、nargs、type、default等选项。通过设置参数,可以控制命令行交互的行为和输出。
部署运行你感兴趣的模型镜像

用途

python用于解析命令行参数和选项的标准模块,内置于python,不需要安装.

使用步骤

引入模块

import argparse

创建一个解析器
使用 argparse 的第一步是创建一个 ArgumentParser 对象:

parser = argparse.ArgumentParser(description='Process some integers.')

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

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

parser.add_argument( ' ***' )

解析参数
ArgumentParser 通过 parse_args() 方法解析参数。它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。在大多数情况下,这意味着一个简单的 Namespace 对象将从命令行解析出的属性构建:

args = parser.parse_args() 

将属性赋值给args实例,即把parser中设置的所有’add_argument’给返回到args子类实例中。
最后得到的结果是一种类似于python字典的数据类型。我们可以使用 args.参数名来提取对应的参数

argparse.ArgumentParser()

参数解析:一般只选择用description

1.description - 命令行帮助的开始文字,大部分情况下,我们只会用到这个参数
2.epilog - 命令行帮助的结尾文字
3.prog - (default: sys.argv[0])程序的名字,一般不需要修改
4.prefix_chars - 命令的前缀,默认是-,例如-f/–file。
5.fromfile_prefix_chars - (default: None)如果你希望命令行参数可以从文件中读取,就可能用到。例如,如果fromfile_prefix_chars=’@’,命令行参数中有一个为”@args.txt”,args.txt的内容会作为命令行参数
6.add_help - 是否增加-h/-help选项 (default: True),一般help信息都是必须的,所以不用设置啦。
7.parents - 类型是list,如果这个parser的一些选项跟其他某些parser的选项一样,可以用parents来实现继承,例如parents=[parent_parser]
8.argument_default - (default: None)设置一个全局的选项的缺省值,使用较少
9.usage - (default: generated)如果你需要修改usage的信息(usage: PROG [-h] [–foo [FOO]] bar [bar …]),那么可以修改这个,一般不要修改。
10.conflict_handler - 不建议使用。这个在极端情况下才会用到,主要是定义两个add_argument中添加的选项的名字发生冲突时怎么处理,默认处理是抛出异常。

add_argument()

命令行参数:

ArgumentParser.add_argument(name or flags...[,action][,nargs][,const][,default]
                           [,type][,choices][,required][,help][,metavar][,dest])

参数解析:

选项字符串名字或列表 — name or flags
必须有的参数,主要分为以下几种类型:

1.位置参数:不带“-”或“- -”的参数,调用时必须输入,且次序与定义时相同
2.可选参数:带“-”或“- -”的参数,没有定义时,默认为None.其中‘-’表示参数的缩写,便于命令行的输入。

命令行遇到参数时的动作 — action
指定应该如何处理命令行参数,预置的操作有以下几种:
1.action=’store’ 仅仅保存参数值,为action默认值

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args('--foo 1'.split())
Namespace(foo='1')

2.action=’store_const’ 与store基本一致,但store_const只保存const关键字指定的值

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args('--foo'.split())
Namespace(foo=42)
>>> parser.parse_args('--foo 34'.split())
usage: arg_parse.py [-h] [--foo]
arg_parse.py: error: unrecognized arguments: 34

3.action=’store_true’或’store_false’ 与store_const一致,只保存True和False
该选项使用较多,以action='store_true’为例,该选项表示只要运行时该变量有传参就将该变量设为True。

#demo.py 代码如下
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--t', help=' ', action='store_true', default=False)
config = parser.parse_args()

print(config.t)

直接运行python demo.py,输出结果False
运行python a.py --t,输出结果True [即只要有–t输入,后面无需再传其它参数,此时该变量设为True]

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(bar=False, foo=True)

4.action=’append’ 将相同参数的不同值保存在一个list中

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])

5.action=’help’ 输出程序的帮助信息

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='help')
>>> parser.parse_args('--foo'.split()) 
usage: arg_parse.py [-h] [--foo]

optional arguments:
  -h, --help  show this help message and exit
  --foo

6.action=’version’ 输出程序版本信息

>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0

传入不同数量的参数 — nargs

nargs=’*’  表示参数可设置零个或多个,返回列表
nargs=’+’ 表示参数可设置一个或多个 ,返回列表
nargs=’?’ 表示参数可设置零个或一个

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='+')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='?')
>>> print(args.foo)
>>> print(args.bar)
>>> print(args.baz)

python demo.py a --foo x y --bar 1 2
out:
['x', 'y']
['1', '2']
'a'

改变数据类型 — type
默认情况下,ArgumentParser对象将命令行参数保存为字符串。但通常命令行参数应该被解释为另一种类型,如 float或int。通过指定type,可以对命令行参数执行类型检查和类型转换。通用的内置类型和函数可以直接用作type参数的值:

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', nargs='+',help='传入的数字')
args = parser.parse_args()

#对传入的数据进行加总
print(args.integers)

python demo.py 1 2
out:
['1', '2']  #默认保存为字符串

更改参数的类型

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', type=int, nargs='+',help='传入的数字')
args = parser.parse_args()

#对传入的数据进行加总
print(args.integers)

python demo.py 1 2
out:
[1, 2]  #参数保存为int类型

默认值 — default
有的时候需要对某个参数设置默认值,即如果命令行中没有传入该参数的值,程序使用默认值。如果命令行传入该参数,则程序使用传入的值。

import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, default='张',help='姓')
parser.add_argument('--name', type=str, default='三', help='名')
args = parser.parse_args()

#打印姓名
print(args.family+args.name)

在命令行中分别输入 python demo.py 、 python demo.py --family=李
运行结果分别为

张三

李三

必需参数 — required
通过required可以设置该参数是否必需,仅针对可选参数。默认为False,若为True,表示必须输入。

import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, help='姓')
parser.add_argument('--name', type=str, required=True, default='', help='名')
args = parser.parse_args()

#打印姓名
print(args.family+args.name)

在命令行中输入 python demo.py --family=张,运行结果

usage: demo.py [-h] [--family FAMILY] --name NAME
demo.py: error: the following arguments are required: --name

因为可选参数name的required=True,所以必须要传入。如果我们将其更改为False,程序运行结果

选择参数 — choices
将命令行参数的值限定在一个范围内,超出范围则报错

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers',help='传入的数字')
parser.add_argument('--num', type=int, choices = [1,2,5])
args = parser.parse_args()

#对传入的数据进行加总
print(args.num)

执行代码 python demo.py 1 --num 5

5

执行代码 python demo.py 1 --num 6

usage: demo.py [-h] [--num {1,2,5}] integers
demo.py: error: argument --num: invalid choice: 20 (choose from 1, 2, 5)
#输入的参数限定在1,2,5中

帮助信息 — help
设置这个选项【参数】的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store', dest='simple_value',
        help='Store a simple value')
parser.add_argument('-c', action='store_const', dest='constant_value',
        const='value-to-store',
        help='Store a constant value')
parser.add_argument('-t', action='store_true', default=False,
        dest='boolean_switch',
        help=argparse.SUPPRESS)

results = parser.parse_args()

执行代码

python demo.py -h

结果显示

usage: demo.py [-h] [-s SIMPLE_VALUE] [-c] [-t]
optional arguments:
  -h, --help       show this help message and exit
  -s SIMPLE_VALUE  Store a simple value
  -c               Store a constant value

设置参数在代码中的变量名 — dest
argparse默认的变量名是–或-后面的字符串,但是也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar') #此时属性名称变成bar
config = parser.parse_args()
print(config.foo) 

运行代码python demo.py --foo 2 输出结果

Traceback (most recent call last):                                                                                        File "demo.py", line 160, in <module>                                                                                     print(config.foo)                                                                                                   AttributeError: 'Namespace' object has no attribute 'foo'  

更改输出的属性值

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar') #此时属性名称变成bar
config = parser.parse_args()
print(config.bar) 

运行代码python demo.py --foo 2 输出结果

2

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值