不管什么或自己的电脑,我超爱用argparse这个套件。理由无他,因为用了之后可以用python简单地写出看起来很专业的命令列指令。那今天这篇文章主要就是介绍一下目前为止我常用的功能在干嘛。
argparse.ArgumentParser
来看看它的样子:
ArgumentParser(prog =无,用法=无,描述=无,Epilog =无)
这边我省略了一些很少用到的关键字参数。
prog:程序的名字,你也可以以把它覆盖写成任何你喜欢的字串。以示例来说,假设你是在example.py里用了ArguemntParser,而且没有特别指定prog是什么的话(也就是保持None),prog会被自动指定成example.py。
usage:字串,主要是会是来显示来告知使用者说应该怎么使用你写的程序(也就是example.py)。保持None的话就会自动根据您设定的参数产生相对应的说明字串(后面会解释)。
description :字串,通常是一段短暂的说明,用来告知使用者说这个程式在做什么。
epilog :字串,会出现在参数说明字串的最后面,通常是一些补充资料。
直接看一个简单的例子应该能够理解了:
#
来自argparse import ArgumentParser的example.py
parser1 = ArgumentParser()
parser2 = ArgumentParser(prog =“ my_example”)
parser3 = ArgumentParser(usage =“ usage”)
parser4 = ArgumentParser(description =“ argparse的简单演示”)
parser5 = ArgumentParser(epilog =“查看文档:https://docs.python.org/3/library/argparse.html “)
parser1.print_help()
#用法:example.py [-h]
##
可选参数:
#-h,--help显示此帮助消息并退出
parser2.print_help()
#用法:my_example [-h]
##
可选参数:
#-h,--help显示此帮助消息并退出
parser3.print_help()
#用法:用法
##
可选参数:
#-h,--help显示此帮助消息并退出
parser4.print_help()
#用法:example.py [-h] #
#
的argparse一个简单的演示
#
#可选参数:
#-h,--help显示此帮助信息并退出
parser5.print_help()
#用法:example.py [-h] #
#
可选参数:
#-h,--help显示此帮助信息并退出
#
#看到该文档:https://docs.python.org/3 /library/argparse.html
这样有研磨来彼此之间的差异了吧?其中-h这个选择性参数(optional arguments)是自动产生的。
加入参数
参数基本上分两种,一种是位置参数(位置参数),另一种就是选择性参数(可选参数),主要区别在于参数指定方式的不同。要说明这个区别,我们要先来介绍怎么告诉一个解析器要解析某种参数?又该以什么方式解析?
你可以使用ArgumentParser.add_argument来加入想解析的参数。用示例说明会比较好懂:
#__future__中的example2.py 从
argparse中导入print_function 导入ArgumentParserparser = ArgumentParser()
parser.add_argument(“ pos1”,help =“位置参数1”)
parser.add_argument(“-o”,“ --optional-arg”,help =“可选参数”,dest =“ opt” ,默认=“默认”)args = parser.parse_args()
print(“ positional arg:”,args.pos1)
print(“ optional arg:”,args.opt)
如果执行python example2.py -h就会出现
用法:example2.py [-h] [-o OPT] pos1位置参数:
pos1位置参数1可选参数:
-h,--help显示此帮助消息并退出
-o OPT,--optional-arg OPT
可选参数可选参数
看起来很专业吧。
根据上面的说明,我们执行python example2.py hello -o world就会看到:
位置arg:您好
可选arg:世界
执行python example2.py foo就会看到:
位置arg:foo
可选arg:默认
所以说啦,位置参数顾名思义,就是根据它出现的位置来指定它的值是多少,而可选参数与之相反,与位置无关,是根据替代来指定(以上面的例子来说,就是-o或--optional-arg后面跟着是谁就指定是谁)。
有关add_argument的一些参数:
default 可以使用指定这个参数的预设值是多少。
dest可以使用指定解析出来的参数的名字。以上面的例子来说,我指定-o的dest在opt,所以我在parse_args回传的args下,可以用args.opt拿到-o的值是多少。
型别
最后用一个例子示范把参数设定成指定的类型别。
#__future__中的example3.py 从
argparse中导入print_function 导入ArgumentParserparser = ArgumentParser()
parser.add_argument(“ n”,help =“重复时间”,type = int)
parser.add_argument(“-u”,“ --user-name”,dest =“ user_name”)args = parser.parse_args()
对于范围内的_(args.n):
print(“ Hello,{}”。format(args.user_name))
这个脚本就是会用指定的名称打招呼很多次XD。
执行python example3.py 3 -u Dboy你会看到:
你好,Dboy
你好,Dboy
你好,Dboy
基本上,所有参数都会以字串的形式给你,但在add_argument里,可以使用类型这个关键字去指定回传的型别。从源代码来看也没啥特别的,就是在回传前把字串传给指定型别做过渡,以这个例子来说,刚开始的n是字串"3",但会穿透int("3")把它转化成int。
那就先简单介绍这样啦。argparse还可以有很多进阶用法,例如说说设计自己的类型或subcommand之类的,有机会再介绍啰。
第二部分传送门:
在第1部分之前,有嘴炮说要来写一篇用argparse写子命令要怎么写,拖了这么久才有动力写这第二篇。 老实说要
2020-6-13 21:59:30
0
40