zoukankan      html  css  js  c++  java
  • python argparse模块

     argparse模块

    argparse是python标准库里面用来处理命令行参数的库。

    基本用法

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.parse_args()
    

    输出结果

    XXX>python arg_example.py
    
    XXX>python arg_example.py -h
    usage: arg_example.py [-h]
    
    optional arguments:
      -h, --help  show this help message and exit
    
    XXX>python arg_example.py a
    usage: arg_example.py [-h]
    arg_example.py: error: unrecognized arguments: a
    
    XXX>
    • 第一个没有任何输出和出错
    • 第二个测试为打印帮助信息,argparse会自动生成帮助文档
    • 第三个测试为未定义的a参数,会出错

     positional arguments

    positional arguments为英文定义,中文名叫有翻译为定位参数的,用法是不用带-就可用

    import argparse
    
    
    parser = argparse.ArgumentParser()
    parser.add_argument("echo")
    args = parser.parse_args()
    print (args.echo)
    
    
    输出结果:
    
    XXX>python arg_example.py a
    a
    
    XXX>python arg_example.py echo
    echo
    
    XXX>python arg_example.py
    usage: arg_example.py [-h] echo
    arg_example.py: error: the following arguments are required: echo
    

    定义了一个叫echo的参数,默认必选

    • 第一个测试为正常用法,回显了输入字符串a
    • 第二个测试为不带参数,由于echo参数为空,所以报错,并给出用法(usage)和错误信息

    optional arguments

    中文名叫可选参数,有两种方式:

    1. 一种是通过一个-来指定的短参数,如-h
    2. 一种是通过--来指定的长参数,如--help
    import argparse
    
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbo", help="verbo usage")
    args = parser.parse_args()
    if args.verbo:
            print ("verbo turned on %s" % args.verbo)
    
    输出结果:
    XXX>python arg_example.py -v hello
    verbo turned on hello
    
    XXX>python arg_example.py --verbo h
    ello
    verbo turned on hello
    
    XXX>python arg_example.py -h
    usage: arg_example.py [-h] [-v VERBO]
    
    optional arguments:
      -h, --help            show this help message and exit
      -v VERBO, --verbo VERBO
                            verbo usage
    
    XXX>python arg_example.py a
    usage: arg_example.py [-h] [-v VERBO]
    arg_example.py: error: unrecognized arguments: a
    

    定义了可选参数-v--verbo,通过解析后,其值保存在args.verbo变量中  

    • 测试1中,通过-v来指定参数值
    • 测试2中,通过--verbos来指定参数值
    • 测试3中,通过-h来打印帮助信息
    • 测试4中,没有给-v指定参数值,所以会报错

     action='store_true'

    通过定义参数时指定action="store_true",可以像-h那样,不需要指定参数值

    import argparse
    
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbo", help="verbo usage", action="store_true")
    args = parser.parse_args()
    if args.verbo:
            print("verbo turned on %s" % args.verbo)
    
    
    输出结果:
    XXX>python arg_example.py -v
    verbo turned on True
    
    XXX>python arg_example.py -h
    usage: arg_example.py [-h] [-v]
    
    optional arguments:
      -h, --help   show this help message and exit
      -v, --verbo  verbo usage
    
    XXX>python arg_example.py -v hello
    usage: arg_example.py [-h] [-v]
    arg_example.py: error: unrecognized arguments: hello
    
    • 测试1中,-v没有指定任何参数也可,其实存的是True和False,如果出现,则其值为True,否则为False
    • 测试2中,通过-h来打印帮助信息
    • 测试3中,-v指定参数值,会报错,因为指定Ture或False

     argparse配置参数

    可以配置的参数有以下:

    • dest: 可以决定解析后,取值时的属性名, 尤其适于有多个等价参数. 不指定时就是选项不加-的字符串.
    • type: 选项的值类型,值的默认类型是字符串, 这里将值指定为其他类型.
    • default: 缺省值. 没有设置缺省值的为None.
    • help: 选项中有 -h 时打印的 help 信息.
    • metavar: 表示显示到 help 中选项的默认值;
    • choices: 当 type 设置为 choices 时,需要设置此值.
    action: 用于控制对选项和参数的处理,像无参数选项处理,可以设置为以下几种字符串:
    • "store": 储存值到 dest 指定的属性,强制要求后面提供参数;
    • "store_true": 当使用该选项时,后面的 dest 将设置为 true, 不跟参数.
    • "store_false": 当使用该选项时,后面的 dest 将设置为 false. 常配合另一个 "store_true" 的选项使用同一个 dest 时使用. 不跟参数.
    • "append": 储存值到 dest 指定的属性,并且是以数组的形式, 必须跟参数.
    • "store_const": 用来存储参数为 const 设置的值到 dest 指定的属性当中.常用于 dest 为同名2个以上选项时的处理. 不跟参数.
    • "append_const": 用来存储参数为 const 设置的数组到 dest 指定的属性当中. 不跟参数.
    • "count": 使用后将给储存值到 dest 指定的属性值加1,可以统计参数中出现次数.用途不大. 不跟参数.
    • "callback": 后面指定回调函数名(不加括号),会将相应opt和args传给回调函数.
    • "help", "version": 对应为帮助和版本. 要另外自己设计时使用.

    default:

    import argparse
    
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbo", help="verbo usage" ,default=1)
    args = parser.parse_args()
    if args.verbo:
            print("verbo turned on %s" % args.verbo)
    

    type

    import argparse
    
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-x', type=int, help="square")
    args = parser.parse_args()
    answer = args.x ** 2
    print(answer)
    

     

    choices

    import argparse
    
    
    parser = argparse.ArgumentParser(description="calculate X to the power of Y")
    parser.add_argument("square", type=int,
                        help="display a square of a given number")
    
    parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], default=1,
                        help="increase output verbosity")
    
    args = parser.parse_args()
    answer = args.square**2
    if args.verbosity == 2:
        print("the square of {} equals {}".format(args.square, answer))
    elif args.verbosity == 1:
        print("{}^2 == {}".format(args.square, answer))
    else:
        print(answer)
    

      

    输出结果

    XXX>python arg_example.py 3 -v 1
    3^2 == 9
    
    XXX>python arg_example.py 3 -v 2
    the square of 3 equals 9
    
    XXX>python arg_example.py 3
    3^2 == 9
    
    XXX>python arg_example.py
    usage: arg_example.py [-h] [-v {0,1,2}] square
    arg_example.py: error: the following arguments are required: square
    
    XXX>python arg_example.py -h
    usage: arg_example.py [-h] [-v {0,1,2}] square
    
    calculate X to the power of Y
    
    positional arguments:
      square                display a square of a given number
    
    optional arguments:
      -h, --help            show this help message and exit
      -v {0,1,2}, --verbosity {0,1,2}
                            increase output verbosity
    

    案例ftp客户端命令行

    import argparse
    
    
    parser = argparse.ArgumentParser(
        description="ftp客户端,使用-S 127.0.0.1 -P 9988 -u hh -p 123")
    
    
    parser.add_argument("-s", "--server", type=str, default='127.0.0.1',
                        dest="server",
                        help="ftp server ip_addr")
    
    parser.add_argument("-P",
                        "--port",
                        type=int,
                        dest="port",
                        help="ftp server port")
    
    
    parser.add_argument("-u",
                        "--username",
                        type=str,
                        choices=['alex', 'egon', 'eva'],
                        dest="username",
                        help="username info")
    
    
    parser.add_argument("-p",
                        "--password",
                        dest="password",
                        help="password info")
    
    args = parser.parse_args()
    print('server:{}  port:{}  username:{}  password:{}'.format(args.server, args.port, args.username, args.password))
    

    输出结果

    XXX>python arg_example.py -h
    usage: arg_example.py [-h] [-s SERVER] [-P SERVER] [-u {alex,egon,eva}]
                          [-p PASSWORD]
    
    ftp客户端,使用-S 127.0.0.1 -P 9988 -u hh -p 123
    
    optional arguments:
      -h, --help            show this help message and exit
      -s SERVER, --server SERVER
                            ftp server ip_addr
      -P SERVER, --port SERVER
                            ftp server port
      -u {alex,egon,eva}, --username {alex,egon,eva}
                            username info
      -p PASSWORD, --password PASSWORD
                            password info
    
    
    
    XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u en -p 123
    usage: arg_example.py [-h] [-s SERVER] [-P PORT] [-u {alex,egon,eva}]
                          [-p PASSWORD]
    arg_example.py: error: argument -u/--username: invalid choice: 'en' (choose from
     'alex', 'egon', 'eva')
    
    XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u alex -p 123
    server:127.0.0.1  port:9988  username:alex  password:123
    
    XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u alex -p 123456
    server:127.0.0.1  port:9988  username:alex  password:123456
    

      

      

    参考http://yarving.historytale.com/  

     

      

      

      

      

  • 相关阅读:
    合格的PM的SkillSet
    SharePoint 客户端对象模型 (一) ECMA Script
    SharePoint 2010的学习-概览
    IT专业人士以及开发者眼中的SharePoint2010搜索
    某跨国公司Web2.0战略架构详解
    Extending your MOSS site with ASP.NET AJAX 1.0
    SliverLight Web part
    SHAREPOINT CAML列表查询
    SharePoint 2010 沙盒开发
    JS Bin 在线编辑代码,所见所得
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/9302617.html
Copyright © 2011-2022 走看看