首先感谢HelloGitHub以及众多大神们。因为接下来我所学习的python argparser 是来自HelloGitHub公众号的分享,我也结合自身知识点盲区,和大家一起学习整理。
HelloGitHub面向编程新手的项目,每月 28 号以月刊的形式更新发布。内容包括:流行项目、入门级项目、企业级项目等,这些开源项目大多都是非常容易上手、很 Cool,能够让你用很短时间感受到编程的魅力和便捷。
那么就进入正片~
前言
本文章使用 python 3.7作为解释器进行分享。
IDE:PyCharm 2019.3.3 (Community Edition)
本文将介绍如何使用 Python 内置的 argparse
标准库解析命令行。
argparse
作为 Python 内置的标准库,提供了较为简单的方式来编写命令行接口。当你在程序中定义需要哪些参数,argparse
便会从 sys.argv
中获取命令行输入进行解析,对正确或非法输入做出响应,也可以自动生成帮助信息和使用说明。
开始
设置解析器
import argparse
parser = argparse.ArgumentParser(description='my cmd line program')
使用 argparse
的第一步是创建一个 ArgumentParser
对象。
ArgumentParser
对象包含将命令行解析成 Python 数据类型所需的全部信息。
通过实例化ArgumentParser,接下来我们就可以通过add_argment方法来为解析器设置参数信息。
定义参数
add_argment具体有哪些参数呢?
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
每个参数先大致了解一下:
name or flags - 选项字符串的名字或者列表,这是必须填写的参数,例如 foo 或者 -f, --foo。
action - 命令行遇到参数时的动作,默认值是 store。
nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
const - action 和 nargs 所需要的常量值。针对action中的store_const和append_const而出现。其实对于那些需要接值的参数,预 先存储一个值,如果没有则取用这个值。
default - 不指定参数时的默认值。
type - 命令行参数应该被转换成的类型。
choices - 参数可允许的值的一个容器,例如choices=[1,5,10] 表示输入参数只能为1或5或10。
required - 可选参数是否可以省略 (仅针对可选参数),当required为True时,在输入命令时需要显示该参数。
help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息。
metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称。
dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线。
我就搬来公众号上的例子,解析一下:
parser.add_argument('nums', metavar='num', type=int, nargs='+', help='a num for the accumulator')
添加了“nums”参数,在帮助(-h)说明中会显示为"num a num for the accumulator",nums参数的类型为int类型,nums可以有1个或多个,即可以输入多个int类型的数据
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the nums(default:find the max)')
添加了“--sum”参数,该参数对应的属性为“accumulate”,当输入了“--sum”时,accumulate对应sum函数;若不提供,accumulate对应max函数,而它的帮助信息为:sum the nums(default:find the max)
解析命令行
定义好参数后,就可以使用 ArgumenteParser.parse_args
方法来解析一组命令行参数字符串了。
args = parser.parse_args()
默认情况下,不用增加参数,而参数取会自 命令行敲入的一段命令(不含文件名)所对应的一个字符串列表。
比如,若你输入 python3 myparser.py --sum 1 2 3
,那么 sys.argsv[1:]
就是 ['--sum', '1', '2', '3']
。
当然,也可以通过 parse_args
入参来指定一组命令行参数字符串
args = parser.parse_args(['--sum', '-1', '0', '1'])
业务处理
解析好命令行后,我们就可以从解析结果中获取每个参数的值,进而根据自己的业务需求做进一步的处理。比如,对于上文中所定义的 nums 参数,我们可以通过解析后的结果中的 accumulate
方法对其进行求最大值或求和(取决于是否提供 --sum
参数)。
整理一下代码:
import argparse
parser = argparse.ArgumentParser(description='my cmd line program')
parser.add_argument('nums', metavar='num', type=int, nargs='+', help='a num for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=min,
help='sum the nums(default:find the max)')
args = parser.parse_args()
result = args.accumulate(args.nums)
print(result)
感谢
https://blog.csdn.net/chenguiyuan1234/article/details/84799388
https://blog.csdn.net/drievn/article/details/70821188
https://www.cnblogs.com/baihualin/p/10344526.html