zoukankan      html  css  js  c++  java
  • python之定义参数模块argparse(一)基本使用

    在shell脚本中,若脚本带参数,则在脚本中使用$1、$2...等引用,

    在python中,也可以定义类似的引用参数,可以为必选项也可以可选项。

    基本用法如下三种:

    1、必选项(位置参数)

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument('var',help='Required parameters')
    args = p.parse_args()
    if args.var:
        print(args.var)

    若把此代码保存为arg.py,则执行的时候必须带一个参数,否则报错:

    python arg.py hello,world

    可以使用如下命令查看:

    D:MyTestProjectMyLearn>python ArgParseLearn.py -h
    usage: ArgParseLearn.py [-h] var
    
    positional arguments:
      var         Required parameters
    
    optional arguments:
      -h, --help  show this help message and exit

    也可以把可选项设置为必选项,在add_argument中设置required为True就可以了,如下设置:

    p.add_argument('-p',help='Optional parameters',required = True)

    2、可选项一

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument('-p',help='Optional parameters')
    args = p.parse_args()
    if args.p:
        print(args.p)
    else:
        print('no var')

    若把此代码保存为arg.py,则执行的时候可带参数也可不带:

    python arg.py

    python arg.py hello,world

    3、可选项二

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument('--parameter',help='Optional parameters')
    args = p.parse_args()
    if args.parameter:
        print(args.parameter)
    else:
        print('no parameter')

    若把此代码保存为arg.py,则执行的时候可带参数也可不带:

    python arg.py

    python arg.py hello,world

    以上为3种入参方法,其实add_argument有很多参数可供选择:

    name - 选项字符串的名字或者列表,例如var、-p等,可以使用-h查看到。

    一般来说,单字母用-,多字母使用--,如果-p,-v,--version,--pass等,如果不使用-或者--,默认这个参数必须填写,类似加了required = True

    action - 基本动作类型,当前默认有如下一些类型:

    store  --这是默认类型,即存储值

    store_const  ---保存const参数的值,此时执行文件只带参数,不带变量,如下:

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument('-p',help='Optional parameters',action = 'store_const',const = '78')
    args = p.parse_args()
    print(args.p)

    如上代码保存为arg.py,应该这么执行:python arg.py -p

    此时打印出来的值为const的值78

    store_true和store_false  ---对应布尔值,True和False

    append   ---此选项把参数对应的值使用list集合起来,如下:

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument('-p',help='Optional parameters',action = 'append')
    args = p.parse_args()
    print(args.p)

    保存为arg.py,则可以如下执行:python arg.py -p 1 -p 2 -p 89

    执行结果为['1', '2', '89']

    append_const  ---这个必须有参数const,把const集合起来

    count  ----查看参数出现几次

    help  ---默认会自动存在的

    version  ---必须配合version参数,用法如下:

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument('-v',help='Optional parameters',action = 'version',version = '1.15.1')
    args = p.parse_args()
    print(args.p)

    保存为arg.py,执行python arg.py -v则显示version参数的值

    nargs - 对应参数应该获取的变量个数,大于1个变量用list来表示。一般取值有如下几个:

    N  数值int型,即nargs=3,nargs=10等

    ?  表示0个或者1个参数,如nargs = '?'

    *  表示0个或者多个参数,如nargs = '*'
    +  表示1个或者多个参数,如nargs = '+'

    const - 某些action和nargs选项要求的常数值。如果有这个参数,则使用脚本时不需要追加变量

    default - 如果命令行中没有出现该参数时该参数的默认值。

    type - 命令行参数应该被转换成的类型。支持以下类型:

    str,int,float,complex,file。如果没有此参数,默认为str类型

    choices - 参数可允许的值的一个容器(列表)。

    required - 该命令行选项是否可以省略(只针对可选参数)。

    help - 参数的简短描述。

    metavar - 参数在帮助信息中的名字,即类似起一个别名。如下:

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument(
    'p',help='Optional parameters',metavar = 'TP')
    p.add_argument('--gogo',help='Optional parameters',nargs = 2,metavar = ('new','old'))
    args = p.parse_args() print(args.p)

    保存为arg.py后执行python arg.py -h,可以看到名称不是p,而是TP:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python arg.py -h
    usage: temp.py [-h] TP
    
    positional arguments:
      TP          Optional parameters
    
    optional arguments:
      -h, --help  show this help message and exit
     --gogo new old  Optional parameters

    dest - 给parse_args()返回的对象要添加的属性名称。即给namespace里面的参数起个别名,作用同metavar(只有非位置参数才可以用dest),如下:

    import argparse
    
    p = argparse.ArgumentParser()
    p.add_argument('-p',help='Optional parameters',metavar = 'TP',dest = 'paaa')
    args = p.parse_args()
    print(args)

    保存为arg.py,然后执行python arg.py -h查看如下:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python arg.py -h
    usage: temp.py [-h] [-p TP]
    
    optional arguments:
      -h, --help  show this help message and exit
      -p TP       Optional parameters

    执行python arg.py -p yy,结果如下:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python temp.py -p 5
    Namespace(paaa='5')

    对于ArgumentParser类中也有许多参数,查看__ini__如下:

        def __init__(self,
                     prog=None,
                     usage=None,
                     description=None,
                     epilog=None,
                     parents=[],
                     formatter_class=HelpFormatter,
                     prefix_chars='-',
                     fromfile_prefix_chars=None,
                     argument_default=None,
                     conflict_handler='error',
                     add_help=True,
                     allow_abbrev=True):

    prog ---程序名称,默认为sys.argv[0]

    usage ---程序使用方法介绍,放在帮助的最前面

    description ---描述信息,在usage之后,参数之前

    epilog ---帮助信息中参数之后的文本信息

    parents ---ArgumentParser 对象的一个列表,如果在列表中,会把parents包含的对象的所有参数带过来,如下示例:

    import argparse
    
    #父参数
    p_parser = argparse.ArgumentParser(add_help=False)
    p_parser.add_argument('-f')
    #子参数并使用父参数
    son = argparse.ArgumentParser(parents = [p_parser])
    son.add_argument('-p')
    sonargs = son.parse_args()
    print(sonargs)

    把上述代码保存为arg.py,执行python arg.py -p aa -f body,结果如下:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python arg.py -p aa -f body
    Namespace(f='body', p='aa')

    可以看到父参数也可以在这里接收到对应的值

    这里要注意的是,若作为父参数,必须要设置add_help = False

    formatter_class = HelpFormatter ---格式化的帮助信息,可以自定义

    prefix_chars = '-'  ----可选参数的前缀,默认是'-'

    fromfile_prefix_chars = None  ---读取额外文件的字符集前缀,如下所示:

    import argparse
    
    p = argparse.ArgumentParser(fromfile_prefix_chars = '@')
    p.add_argument('-f')
    args = p.parse_args()
    print(args)
    print(args.f)

    保存为arg.py,在arg.py同目录下创建一个文件a.txt并输入一行:-f mylife

    然后在命令行中执行python arg.py @a.txt,接入如下:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python arg.py @a.txt
    Namespace(f=' mylife')
     mylife

    argument_default = None ---参数的默认值,默认None

    conflict_handler  ---解决参数冲突,如下可以使用新参数顶替就参数:

    import argparse
    
    p = argparse.ArgumentParser(conflict_handler = 'resolve')
    p.add_argument('-f','--fule',help = 'old')
    p.add_argument('--fule',help = 'new')
    print(p.parse_args())

    保存如上代码为arg.py,执行python arg.py -h,结果如下:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python arg.py -h
    usage: temp.py [-h] [-f FULE] [--fule FULE]
    
    optional arguments:
      -h, --help   show this help message and exit
      -f FULE      old
      --fule FULE  new

    再执行python arg.py,结果如下:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python arg.py
    Namespace(fule=None)

    发现只有一个参数fule,当我们带参数执行时,若带-f则fule参数也可以取得值,若带-f和--fule,此时fule参数值为--fule的参数值。

    add_help = True  ---默认增加-h/--help给解释器,若为False则不会自动添加-h/--help选项

    allow_abbrev = True ---允许参数简写,默认是允许的,如下:

    import argparse
    
    p = argparse.ArgumentParser(allow_abbrev = True)
    p.add_argument('--fule',help = 'fule')
    p.add_argument('--file',help = 'file')
    args = p.parse_args()
    print(args)

    保存为arg.py,在命令行中执行python arg.py --fu c,执行结果如下:

    D:PycharmProjectsuntitledMyTestProjectMyLearn>python arg.py --fu c
    Namespace(file=None, fule='c')

    可以看到fule参数获取到了值,如果allow_abbrev = False,则会报错

  • 相关阅读:
    php CI框架基础知识
    1206 多表单提交,强类型
    1205 Mvc的Razor语法
    1204 Mvc
    1117 邮件验证
    1115 模板页
    1113 Ajax
    1110 Jquary动画
    1108 Jquary
    1107 Linq高级查询
  • 原文地址:https://www.cnblogs.com/watertaro/p/10498132.html
Copyright © 2011-2022 走看看