1 argparse命令行参数解析库用法总结
argparse是python内置的命令行参数解析库,如果你的Python程序在运行时需要配置大量的可选参数,那么使用这个库可以很容易进行命令行参数的管理,并根据各种参数做出不同的操作,有利于逻辑分离,增加代码的逻辑性、简洁性、易用性。
该库在很多知名的项目中使用,特别是在深度学习项目中被广泛用于命令行参数解析,在阅读源码时经常可以看到这个库的使用,本文将对该库的一些基础用法进行简单的总结。
1.1 argparse的基本使用
1.1.1 创建解析器
使用argparse的第一步是创建一个ArgumentParser
对象
parser=argparse.ArgumentParser(description='Process some integers.')
ArgumentParser对象包含将命令行解析成Python数据类型所需的全部信息。
1.1.2 添加参数
给一个ArgumentParser
添加程序参数信息可以通过调用add_argument()
方法完成。通常,这些调用指定ArgumentParser
如何获取命令行字符串并将其转换为对象。例如
parser.add_argument('integers',metavar='N',type=int,nargs='+',help='an integer for the accumulator')
1.1.3 解析参数
ArgumentParser
通过parse_args()
方法解析参数。它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。
parser=argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers',metavar='N',type=int,nargs='+',help='an integer for the accumulator')
args = parser.parse_args()
1.1.4 设置默认参数
在大多数时候,parse_args()
所返回对象的属性将完全通过检查命令行参数来确定。set_defaults()
则允许加入一些无须任何命令行检查的额外属性
ArgumentParser.set_defaults(**kwargs)
需要注意的是,如果通过set_defaults(**kwargs)
设置了默认参数,它会覆盖所设置的命令行参数,也就是说set_defaults(**kwargs)
设置的默认参数比在运行程序添加的命令行参数有更高的优先级。
比如
# -*- coding: utf-8 -*-
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food', type=str, default='rice', help='food you want to eat')
args = parser.parse_args()
print('I want to eat {}'.format(args.food))
parser.set_defaults(food='beef')
args = parser.parse_args()
print('I want to eat {}'.format(args.food))
程序输出
I want to eat rice
I want to eat beef
1.1.5 使用示例
下面一个简单的例子演示argparse的用法,现在假设我想程序输出I want to eat xxx
,其中xxx
代表一种食物,这个食物的命令通过命令行参数food
传递到程序中。假设此python文件名为eat.py
,其代码如下
# -*- coding: utf-8 -*-
import argparse
def get_parser():
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food',type=str,default='rice',help='food you want to eat')
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
print('I want to eat {}'.format(args.food))
在命令行中执行一下命令
python eat.py --food fish
程序输出
I want to eat fish
上面的代码段中,我们显示引入了argparse
包,然后通过argparse.ArgumentParser
函数生成argparse
对象,其中这个函数的description
函数表示在命令行显示帮助信息的时候,这个程序的描述信息。之后我们通过对象的add_argument
函数来增加参数。这里我们只增加了一个--food
的参数,然后后面的default
参数表示如果没提供参数,我们默认采用的值。即如果像下面这样执行命令:
python eat.py
程序输出
I want to eat rice
最后我们通过argpaser
对象的parser_args
函数来获取所有参数args,然后通过args.food
的方式得到我们设置的--food
参数的值,可以看到这里argparse默认的参数名就是--food
形式里面--后面的字符串。
在下文将介绍parser.add_argument()
中所使用的一些参数,并进行解释。
1.2 parser.add_argument的参数
1.2.1 default参数
default参数表示当命令行中没有设置该参数的时候,则使用默认值。
1.2.2 required参数
required参数表示命令行中这个参数是否是必须要设置的,如果该参数不进行设置,则在程序运行时会出错。
如果设置
parser.add_argument('--food',type=str,required=True)
则表示food
是必须要进行设置的。
例如:
# -*- coding: utf-8 -*-
import argparse
def get_parser():
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food',type=str,default='rice',help='food you want to eat',required=True)
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
print('I want to eat {}'.format(args.food))
如果不设置该参数,使用
python eat.py
运行程序,则会出现以下报错
usage: ArgParseTest.py [-h] --food FOOD
eat.py: error: the following arguments are required: --food
1.2.3 type参数
type参数用于表明此命令行参数的数据类型,默认为str类型。
- 如果需要参数为布尔类型,则设置
type = bool
- 如果需要参数为int类型,则设置
type = int
- 如果需要参数为str类型,则设置
type = str
- 如果需要参数为float类型,则设置
type = float
例如
# -*- coding: utf-8 -*-
import argparse
def get_parser():
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food',type=str,default='rice',help='food you want to eat')
parser.add_argument('--food_num', type=int, default=1, help='food num')
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
print('I want to eat {} {}'.format(args.food_num,args.food))
使用以下命令运行上述代码
python eat.py --food fish --food_num 100
程序输出
I want to eat 100 fish
1.2.4 choices参数
choices参数表明此命令行参数只能从给定的参数列表中进行选取。
# -*- coding: utf-8 -*-
import argparse
def get_parser():
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food',type=str,default='rice',help='food you want to eat',choices=['fish','rice','beef'])
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
print('I want to eat {}'.format(args.food))
上述例子通过对命令行参数food
使用choices参数,表明food
参数只能从fish、rice、beef三种食物之中进行选取,如果不是从给定的可选参数中选取,则会报错。
比如,使用以下命令行运行上述程序
python eat.py --food tomato
则会出现以下错误信息
usage: ArgParseTest.py [-h] [--food {fish,rice,beef}]
eat.py: error: argument --food: invalid choice: 'tomato' (choose from 'fish', 'rice', 'beef')
在命令行指定的--food
参数值为tomato
,而这个不在指定的choices范围内,所以会报错。
1.2.5 help参数
help参数比较简单,主要是设置该参数的help信息,如果项目很大,需要设置的参数很多,那么为每一个命令行参数设置help参数是很有必要的,有利于帮助使用者快速的明白各个参数的作用,尽早的的投入项目开发。
例如
# -*- coding: utf-8 -*-
import argparse
def get_parser():
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food',type=str,default='rice',help='food you want to eat')
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
print('I want to eat {}'.format(args.food))
使用以下命令行运行上述代码
python eat.py -h
或者
python eat.py --help
程序输出
usage: eat.py [-h] [--food FOOD]
ArgParse Test Demo
optional arguments:
-h, --help show this help message and exit
--food FOOD food you want to eat
通过使用-h
或者--help
可以让程序输出可以使用的命令行参数以及各个参数的具体作用,可以帮助使用用户更好的使用程序。
1.2.6 dest参数
argparse默认的变量名是--或-后面的字符串,但是你也可以通过dest=xxx
来设置参数的变量名,然后在代码中用args.xxx
来获取参数的值。
例如
# -*- coding: utf-8 -*-
import argparse
def get_parser():
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food',type=str,default='rice',help='food you want to eat',dest='food_name')
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
print('I want to eat {}'.format(args.food_name))
print('I want to eat {}'.format(args.food))
程序输出
I want to eat fish
Traceback (most recent call last):
File "./eat.py", line 15, in <module>
print('I want to eat {}'.format(args.food))
AttributeError: 'Namespace' object has no attribute 'food'
在上述代码中,我们使用dest
参数将food
参数在程序中使用的名字修改为food_name
,这会使得原有的args.food
在程序中不能被使用,只能通过args.food_name
获取food
参数的值。
1.2.7 nargs参数
nargs参数主要用于设置参数的个数。
使用方式如下:
parser.add_argument('--food', nargs=x)
其中x的候选值和含义如下:
值 | 含义 |
---|---|
? | 0或1个参数 |
* | 0或所有参数 |
+ | 所有,并且至少一个参数 |
例如
# -*- coding: utf-8 -*-
import argparse
def get_parser():
parser = argparse.ArgumentParser(description="ArgParse Test Demo")
parser.add_argument('--food',nargs='+')
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
foods = ', '.join(args.food)
print('I want to eat {}'.format(foods))
使用以下命令行执行上述代码
python eat.py --food fish rice beef
执行结果如下:
I want to eat fish, rice, beef
参考链接
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Python – argparse命令行参数解析库用法总结
原文链接:https://www.stubbornhuang.com/2167/
发布于:2022年06月16日 9:40:02
修改于:2023年06月26日 20:08:53
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52