zoukankan      html  css  js  c++  java
  • Argparse模块

    官方document

    ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

    定义应该如何解析一个命令行参数。下面每个参数有它们自己详细的描述,简单地讲它们是:

    name or flags - 选项字符串的名字或者列表,例如foo 或者-f, --foo。
    action - 在命令行遇到该参数时采取的基本动作类型。
    nargs - 应该读取的命令行参数数目。
    const - 某些action和nargs选项要求的常数值。
    default - 如果命令行中没有出现该参数时的默认值。
    type - 命令行参数应该被转换成的类型。
    choices - 参数可允许的值的一个容器。
    required - 该命令行选项是否可以省略(只针对可选参数)。
    help - 参数的简短描述。
    metavar - 参数在帮助信息中的名字。
    dest - 给parse_args()返回的对象要添加的属性名称。
    # 位置参数
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("square", type=int,help="display a square of a given number")
    args = parser.parse_args()
    print(args.square**2)
    #输出
    >python ArgparseDemo.py 123
    15129
    # 可选参数
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbosity", help="increase output verbosity",action="store_false")
    args = parser.parse_args()
    if args.verbosity:
        print('verbosity turned on')
    # 当有action关键词且值为store_true时,如果命令行指定了这个可选参数,args.verbosity就赋值为True,否则就为False.多指定了值就会发生错误。
    #输出:
    >python ArgparseDemo.py --verbosity
    verbosity turned on
    
    >python ArgparseDemo.py 12
    usage: ArgparseDemo.py [-h] [--verbosity]
    ArgparseDemo.py: error: unrecognized arguments: 12

    简写:

    #简写
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbosity", help="increase output verbosity",action="store_true")
    args = parser.parse_args()
    if args.verbosity:
        print('verbosity turned on')
    
    
    #输出
    >python ArgparseDemo.py -v
    verbosity turned on
    #混合使用定位(位置)和可选参数
    
    parser = argparse.ArgumentParser()
    parser.add_argument("square", help="display a square of a given number",type=int)
    parser.add_argument("-v", "--verbosity", help="increase output verbosity",action="store_true")
    args = parser.parse_args()
    
    answer = args.square**2
    if args.verbosity:
        print('the square of {} equals {}'.format(args.square, answer))
    else:
        print(answer)
    
    #输出
    >python ArgparseDemo.py 4 -v
    the square of 4 equals 16
    
    >python ArgparseDemo.py 4
    16
    # 来看看为程序加上处理重复参数的能力会怎么样:
    parser = argparse.ArgumentParser()
    parser.add_argument("square", type=int,
                        help="display a square of a given number")
    parser.add_argument("-v", "--verbosity", type=int,
                        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)
    
    >python ArgparseDemo.py 4
    16
    
    >python ArgparseDemo.py 4 -v 1
    4^2 == 16
    
    >python ArgparseDemo.py 4 -v 2
    the square of 4 equals 16
    
    >python ArgparseDemo.py 4 -v 3
    16
    #出现了bug
    # 我们可以通过限制--verbosity后面跟的值来修正:
    import argparse
    parser = argparse.ArgumentParser()
    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],
                        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)
    
    #输出
    >python ArgparseDemo.py 4 -v 3
    usage: ArgparseDemo.py [-h] [-v {0,1,2}] square
    ArgparseDemo.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
    '''现在让我们用一种更常用的方法来处理,类似CPython处理自己的参数(参考python --help):'''
    
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("square", type=int,
                        help="display the square of a given number")
    parser.add_argument("-v", "--verbosity", action="count",
                        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)
    
    
    >python ArgparseDemo.py 4
    16
    
    >python ArgparseDemo.py 4 -v
    4^2 == 16
    
    >python ArgparseDemo.py 4 -vv
    the square of 4 equals 16
    
    >python ArgparseDemo.py 4 --verbosity --verbosity
    the square of 4 equals 16
    
    >python ArgparseDemo.py 4 -vvv
    16
    #最后那个输出又暴露了程序的bug
    
    >python ArgparseDemo.py 4 -h
    usage: ArgparseDemo.py [-h] [-v] square
    
    positional arguments:
      square           display the square of a given number
    
    optional arguments:
      -h, --help       show this help message and exit
      -v, --verbosity  increase output verbosity
    
    '''但是不爽的是,帮助信息并没有做出有用的提示,不过可以通过修改help来改善这个问题。'''
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("square", type=int,
                        help="display the square of a given number")
    parser.add_argument("-v", "--verbosity", action="count",
                        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)
    
    #输出
    >python ArgparseDemo.py 4 -vvvv
    the square of 4 equals 16
    
    >python ArgparseDemo.py 4 -v
    4^2 == 16
    
    >python ArgparseDemo.py 4
    Traceback (most recent call last):
      File "ArgparseDemo.py", line 180, in <module>
        if args.verbosity >= 2:
    TypeError: '>=' not supported between instances of 'NoneType' and 'int'
    
    '''
    第一个输出是正确的,修正了上个版本的问题,参数出现次数>=2时都能显示详细的信息。
    第三个输出还是有问题
    '''
    #再来修改下:
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("square", type=int,
                        help="display the square of a given number")
    parser.add_argument("-v", "--verbosity", action="count",default=0,
                        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)
    
    #输出
    >python ArgparseDemo.py 4
    16
    如有疑问请联系我,写的不对的地方请联系我进行更改,感谢~ QQ:1968380831
  • 相关阅读:
    java 使用相对路径读取文件
    appium 使用过程问题踩坑-笔记
    CentOS下启动Tomcat
    jodis遇到的问题
    CentOS 7.0 防火墙
    sentinel
    keepalived
    在Tomat7上使用Redis保存Session
    Log4j 使用
    java路径问题
  • 原文地址:https://www.cnblogs.com/1zhangwenjing/p/7852258.html
Copyright © 2011-2022 走看看