python --version
来查询过Python的版本信息,或者使用
python --help
来查询帮助信息,这就是使用了python中的参数解析(argparse)来实现的。很多小伙伴写了自己的项目,也想为自己的项目创建版本信息,或者定义启动方式,一起来学习一下python中的argpars吧!
import argparse # 引入argparse包
parser = argparse.ArgumentParser() # 创建参数对象
parser.add_argument() # 添加参数
args = parser.parse_args() # 类似于类的实例化,解析对象
基本结构很简单,就只有四步:
引入包不用多说,从创建参数对象开始讲起!
创建对象参数很简单,类似于创建一个类parser = argparse.ArgumentParser()
。
需要注意的是我们可以把添加描述信息parser.description = '……'
放到创建对象参数里面,描述信息就是–help时的提示信息
import argparse
parser = argparse.ArgumentParser(description = 'parser demo')
parser.add_argument('A',help = 'argument for A')
args = parser.parse_args()
控制台信息:
我们可以看到控制台打印出来描述信息:parser demo
当然,我们也可以分开写:
import argparse
parser = argparse.ArgumentParser()
parser.description = 'parser demo' # 分开写
parser.add_argument('A',help = 'argument for A')
args = parser.parse_args()
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
定位参数就是必须要写的参数,参数前面没有破折号‘-’。
比如上文中的:parser.add_argument('A',help = 'argument for A')
,所以我们在执行python文件时必须指定A参数:python test_parser.py a
import argparse
parser = argparse.ArgumentParser(description = 'parser demo')
parser.add_argument('a',help = 'argument for a',type=int)
parser.add_argument('b',help = 'argument for b',type=int)
args = parser.parse_args()
multi = args.a * args.b
print(multi)
以-或开头的参数–通常被认为是可选的,即可以不写的参数。
import argparse
def main():
parser = argparse.ArgumentParser(description="Demo of argparse")
parser.add_argument('-n','--name', default='Lucy')
parser.add_argument('-s','--sex', default='male')
args = parser.parse_args()
print(args)
name = args.name
sex = args.sex
print('Hello {} {}'.format(name,sex))
if __name__ == '__main__':
main()
上述代码中,增加了两个可选参数name和sex。其中-‘n’,’-name’表示同一个参数,default表示在命令行运行时没有提供参数,程序会将default的值作为参数。
注意⚠️:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-f', '--foo',default=42)
>>> parser.parse_args(['-f','2']) # 为foo参数赋值,括号内可换为 ['--foo','2']
# 通过这样的方式为可选参数赋值时,前面写参数后面写值
控制台输出:
Namespace(foo='2') # 系统用双破折号后的字符当作参数名
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')
>>> parser.parse_args(['BAR'])
控制台输出:
Namespace(bar='BAR', foo=None)
import argparse
def main():
parser = argparse.ArgumentParser(description="Demo of argparse")
parser.add_argument('-n','--name', default='Lucy')
parser.add_argument('-s','--sex', default='male')
args = parser.parse_args()
print(args)
name = args.name
sex = args.sex
print('Hello {} {}'.format(name,sex))
if __name__ == '__main__':
main()
required: 表示这个参数是否一定需要设置
type:参数类型
默认为string类型,可更改为int,boolean等
choices:参数值只能从几个选项里面选择
import argparse
def get_parser():
parser = argparse.ArgumentParser(
description='choices demo')
parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'])
# 输入的值只能从alexnet和vgg中选择
return parser
if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
print('the arch of CNN is '.format(args.arch))
action - 在命令行遇到此参数时要采取的基本操作类型。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo',action='store_const',const='b',default='c')
parser.add_argument('num', action='store_const', const=3, default=4)
args = parser.parse_args()
print(args.foo)
print(args.num)
parser = argparse.ArgumentParser()
parser.add_argument('--foo',action='append')
args = parser.parse_args()
print(args.foo)
help:指定参数的说明信息
在现实帮助信息的时候,help参数的值可以给使用工具的人提供该参数是用来设置什么的说明,对于大型的项目,help参数和很有必要的,不然使用者不太明白每个参数的含义,增大了使用难度。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store', dest='simple_value',
help='Store a simple value')
parser.add_argument('-c', action='store_const', dest='constant_value',
const='value-to-store',
help='Store a constant value')
parser.add_argument('-t', action='store_true', default=False,
dest='boolean_switch',
help='Set a switch to true')
parser.add_argument('-f', action='store_false', default=False,
dest='boolean_switch',
help='Set a switch to false')
parser.add_argument('-a', action='append', dest='collection',
default=[],
help='Add repeated values to a list')
parser.add_argument('-A', action='append_const', dest='const_collection',
const='value-1-to-append',
default=[],
help='Add different values to list')
parser.add_argument('-B', action='append_const', dest='const_collection',
const='value-2-to-append',
help='Add different values to list')
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
results = parser.parse_args()
print 'simple_value =', results.simple_value
print 'constant_value =', results.constant_value
print 'boolean_switch =', results.boolean_switch
print 'collection =', results.collection
print 'const_collection =', results.const_collection
在命令行加-h或–help参数运行该命令,获取帮助信息的时候,结果如下:
$ python argparse_action.py -h
usage: argparse_action.py [-h] [-s SIMPLE_VALUE] [-c] [-t] [-f]
[-a COLLECTION] [-A] [-B] [--version]
optional arguments:
-h, --help show this help message and exit
-s SIMPLE_VALUE Store a simple value
-c Store a constant value
-t Set a switch to true
-f Set a switch to false
-a COLLECTION Add repeated values to a list
-A Add different values to list
-B Add different values to list
--version show program's version number and exit
值 | 含义 |
---|---|
N | 参数的绝对个数(例如:3) |
‘?’ | 0或1个参数 |
‘*’ | 0或所有参数 |
‘+’ | 所有,并且至少一个参数 |
import argparse
def get_parser():
parser = argparse.ArgumentParser(
description='nargs demo')
parser.add_argument('-name', required=True, nargs='+')
return parser
if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
names = ', '.join(args.name)
print('Hello to {}'.format(names))
结果:
$ python nargs.py -name A B C
Hello to A, B, C
argparse默认的变量名是–或-后面的字符串,但是你也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。
例如:如果提供dest,dest=“a”,那么可以通过args.a访问该参数
ArgumentParser通过该parse_args()方法解析参数 。这将检查命令行,将每个参数转换为适当的类型,然后调用相应的操作。在大多数情况下,这意味着Namespace将从命令行解析的属性构建一个简单的对象:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')
>>> parser.parse_args(['BAR'])
控制台输出:
Namespace(bar='BAR', foo=None)