参考了python文档argparse- 用于命令行选项,参数和子命令的解析器和一篇非常非常优秀的博客python命令行解析模块argpars。
该argparse
模块可以轻松编写用户友好的命令行界面。该程序定义了它需要的参数,argparse
并将弄清楚如何解析它们sys.argv
。argparse
当用户给程序提供无效参数时,该模块还会自动生成帮助和使用消息并发出错误。
首先导入函数库:
import argparse
创建解析器
parser = argparse.ArgumentParser(description='What you want to say.')
通过argparse.ArgumentParser()
函数创建一个 ArgumentParser
对象,并将结果赋值给parser
。
该ArgumentParser
对象将包含将命令行解析为Python数据类型所需的所有信息。
最常用的参数是description
。参数description
可以被字符串赋值,用来描述解析器的功能,使用帮助时被打印。
ArgumentParser
对象的其他参数如下,详细的介绍见文首提到的第二个链接:
PROG
-程序的名称(默认:sys.argv[0]
)usage
- 描述程序用法的字符串(默认值:从添加到解析器的参数生成)description
- 参数help之前显示的文本(默认值:none
)epilog
- 参数help后显示的文本(默认值:none
)parents
-ArgumentParser
还应包含其参数的对象列表formatter_class
- 用于自定义帮助输出的类prefix_chars
- 前缀可选参数的字符集(默认值:' - '
)fromfile_prefix_chars
-该组文件前缀字符从额外的参数应该读(默认值:None
)argument_default
-为参数的全局默认值(默认值:None
)conflict_handler
- 解决冲突选项的策略(通常是不必要的)add_help
-添加-h/–help选项解析器(默认值:True
)allow_abbrev
- 如果缩写是明确的,则允许缩写长选项。(默认值:True
)
添加参数
parser.add_argument('--cuda', type=int, default=-1,
help="Specify CUDA device (defaults to -1, which learns on CPU)")
调用parser.add_argument('--cuda',……)
函数来添加参数,返回值为args.cuda
。
该函数最常用的参数是:
type
:指定读入参数的类型。default
:缺省的时候的默认值。help
:打印帮助信息时候的字符串。
比如这里是指定参数名为cuda
,类型type
为int
,缺省时的默认值default
为-1
,帮助信息为字符串类型的Specify CUDA device (defaults to -1, which learns on CPU)
。
其他的参数还有下面这些,详细的介绍见文首提到的第二个链接:
action
:指定应该如何处理命令行参数。nargs
:默认情况下ArgumentParser
对象将参数与一个与action
一对一关联,通过指定nargs
可以将多个参数与一个action
相关联。choices
:将命令行参数的值限定在一个范围内,超出范围则报错 。required
:指定命令行参数是否必需。dest
:允许自定义ArgumentParser
的参数属性名称 。
解析参数
ArgumentParser
通过该parse_args()
方法解析参数 。这将检查命令行,将每个参数转换为适当的类型,然后调用相应的操作。在大多数情况下,这意味着Namespace
将从命令行解析的属性构建一个简单的对象。
在脚本中,parse_args
()通常会调用不带参数。
# 添加参数
parser.add_argument('--cuda', type=int, default=-1,
help="Specify CUDA device (defaults to -1, which learns on CPU)")
# 解析参数
args = parser.parse_args()
# 参数操作
CUDA_DEVICE = get_device(args.cuda)
通过解析函数args = parser.parse_args()
后可以对参数args.cuda
进行操作,比如CUDA_DEVICE = get_device(args.cuda)
。