参考:
Python–argparse 模块:https://www.jianshu.com/p/ea52fdfaa4ad
argparse
是python
用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse
模块。argparse
模块的作用是用于解析命令行参数。
argsparse
是python
的命令行解析的标准模块,内置于python
,不需要安装。使用的时候直接:
import argparse
这个模块使用起来十分简单,就类似于 造(买)个冰箱→在冰箱里面放点食材→需要的时候把食材拿出来做出美味的食物。
它的使用分为三步:
# 1.创建一个解析对象;
parser = argparse.ArgumentParser()
# 2.然后向该对象中添加你要关注的命令行参数和选项,
# 每一个 add_argument 方法对应一个你要关注的参数或选项;
parser.add_argument()
# 3. 最后调用 parse_args()方法进行解析;
parser.parse_args()
另外,关于参数的书写习惯,有如下几种
parser.parse_args('-x X'.split())
=
分开 ( “长”选项名字,即选项的名字多于一个字符),比如parser.parse_args('--foo=FOO'.split())
parser.parse_args('-xX')
上面简要介绍了使用的基本步骤,下面首先详细介绍涉及到的几个函数,然后再给一个实例。
这个函数的作用就是创建一个解析对象(冰箱),下面是它的参数列表:
ArgumentParser(prog=None,
usage=None,
description=None,
epilog=None,
parents=[],
formatter_class=argparse.HelpFormatter,
prefix_chars='-',
fromfile_prefix_chars=None,
argument_default=None,
conflict_handler='error',
add_help=True)
参数含义如下所示:
sys.argv[0]
,用来在help
信息中描述程序的名称。help
信息前的文字。help
信息之后的信息False
时,help
信息里面不再显示-h --help
信息。-
此函数用来指定程序需要接受的命令参数,它的参数列表如下所示:
add_argument(name or flags...
[, action]
[, nargs]
[, const]
[, default]
[, type]
[, choices]
[, required]
[, help]
[, metavar]
[, dest])
# 注:[] 表示可选
参数含义如下:
parse_args()
运行时,会用-
来认证可选参数,剩下的即为位置参数。位置参数必选,可选参数可选。argparse
内置6种动作可以在解析到一个参数时进行触发:store
保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。store_const
保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。store_ture/store_false
保存相应的布尔值。这两个动作被用于实现布尔开关。append
将值保存到一个列表中。若参数重复出现,则保存多个值。append_const
将一个定义在参数规格中的值保存到一个列表中。version
打印关于程序的版本信息,然后退出。 count
统计参数出现的次数。N
(N个),*
(任意多个),+
(一个或更多),值为?
时,首先从命令行获得参数,若没有则从const
获得,然后从default
获得:parse_args()
返回的命名空间对象中名为该 dest
参数值的一个属性。如果提供dest,例如dest="a"
,那么可以通过args.a
访问该参数下面给个简单的示例,只是说明如何调用而已,后续可根据上面对函数的详细解释来使其更实用智能。
import argparse
parser = argparse.ArgumentParser(description ="This is a Test!")
parser.add_argument("type",choices=['scheduler','tool'],
help="make application type")
parser.add_argument('-c',dest='configurefile',help="configure file")
parser.print_help()
args = parser.parse_args(["tool","-c","a.ini"])
print(args.type)
print(args.configurefile)
# --------------output------------------
usage: draft.py [-h] [-c CONFIGUREFILE] {scheduler,tool}
This is a Test!
positional arguments:
{scheduler,tool} make application type
optional arguments:
-h, --help show this help message and exit
-c CONFIGUREFILE configure file
tool
a.ini
这个简单的例子就,就创建了一个argparse对象,然后加了两个参数(不算-h),一个是必选参数
tool
,另一个是可选参数-c
,然后使用dest
将其转换为参数的一个属性。
ps:其实一开始笔者遇到了一个问题,一开始笔者在必选参数前加了type
,其实是不用的,对于必选参数直接给值即可。
另外,当有多个必选参数时,需要注意必选参数的顺序一定要和加参数的顺序保持一致。
可选参数和必选参数可以交换顺序,只需保持可选参数与值不要分开,必选参数的相对顺序与加参数的顺序保持一致即可!