Python中Argparse全面解析

文章目录

  • 一.基本结构
  • 二.创建对象参数
  • 三.添加参数
    • 3.1name or flags
      • 3.1.1定位参数
      • 3.1.2可选参数参数
    • 3.2 default
    • 3.3 required
    • 3.4 type
    • 3.5 choices
    • 3.6 action
    • 3.7 help
    • 3.8 nargs
    • 3.9 metavar
    • 4.0 dest
  • 四.解析参数

相信很多小伙伴在terminal里使用过这一行命令 python --version来查询过Python的版本信息,或者使用 python --help来查询帮助信息,这就是使用了python中的参数解析(argparse)来实现的。很多小伙伴写了自己的项目,也想为自己的项目创建版本信息,或者定义启动方式,一起来学习一下python中的argpars吧!

一.基本结构

import argparse                    # 引入argparse包

parser = argparse.ArgumentParser() # 创建参数对象
parser.add_argument()              # 添加参数
args = parser.parse_args()         # 类似于类的实例化,解析对象

基本结构很简单,就只有四步:

  1. 引入包
  2. 创建参数对象
  3. 添加参数
  4. 解析对象

引入包不用多说,从创建参数对象开始讲起!

二.创建对象参数

创建对象参数很简单,类似于创建一个类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() 

控制台信息:
Python中Argparse全面解析_第1张图片
我们可以看到控制台打印出来描述信息: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])

3.1name or flags

3.1.1定位参数

定位参数就是必须要写的参数,参数前面没有破折号‘-’。
比如上文中的: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)

在这里插入图片描述

3.1.2可选参数参数

以-或开头的参数–通常被认为是可选的,即可以不写的参数。

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的值作为参数。

注意⚠️:

  • 单破折号与双破折号的区别:单破折号表示后面跟一个字符,双破折号表示后面跟多个字符。
  • 可以用单引号或者双引号为参数赋值,具体情况如下图所示
    Python中Argparse全面解析_第2张图片
  • 当’-’, '–'同时出现时,系统默认后者为参数名。具体解释如下代码段所示:
>>> 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)

3.2 default

  • default:没有设置值情况下的默认参数
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()

如果未指定参数,则为default默认参数:
在这里插入图片描述

3.3 required

required: 表示这个参数是否一定需要设置

3.4 type

type:参数类型

默认为string类型,可更改为int,boolean等

3.5 choices

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))

在这里插入图片描述

3.6 action

action - 在命令行遇到此参数时要采取的基本操作类型。

  1. ‘store’ - 默认的操作,用来存储参数的值
  2. ‘store_const’ - 适用于可选参数optional arguments,用来存储const关键字指定的值。如下例,对于可选参数,foo存储的值为b,默认为c,在命令行执行时,如果不写–foo则为默认的c,如果写上–foo,则表示调用–foo存储的b,这时只需写–foo表示调用,后不跟任何参数。对于定位参数,命令行执行时什么都不写,会自动调用3,因此default=4在这里无用。注意,这里const后接的值就代表了类型,如2表示int,‘2’表示string,无需再指定type
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)

在这里插入图片描述

  1. append:存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用,仅适用于可选参数。
parser = argparse.ArgumentParser()
parser.add_argument('--foo',action='append')
args = parser.parse_args()
print(args.foo)

在这里插入图片描述

3.7 help

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

3.8 nargs

  • nargs: 设置参数在使用可以提供的个数
含义
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

3.9 metavar

  • metavar: 这个参数用于help信息输出中

4.0 dest

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)

你可能感兴趣的:(Python中Argparse全面解析)