Python 系列学习二十五:argparse, ArgumentParser

前言

打算写一系列文章来记录自己学习 Python 3 的点滴;

ArgumentParser

概述

ArgumentParser 的参数解析非常强大,总体上,提供了两类解析参数的方式;1) Positional arguments,既是必须输入的参数 2)Optional arguments,既是可选参数;两种参数定义的方式不同;

Positional Arguments 必填参数

  1. 如何定义
    prog.py

    1
    2
    3
    4
    5
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("square")
    args = parser.parse_args()
    print(args.echo)

    通过 parser.add_argument(“square”) 我们便定义了一个必填参数(Positional Argument);注意,必填参数前面不接-或者--这样的描述符;或者,我们可以给出更多的针对 echo 的描述信息,

    1
    2
    3
    4
    5
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("square", help="display a square of a given number", type=int)
    args = parser.parse_args()
    print(args.echo)
    1. 通过 help 参数给出更多的描述信息;
      这个时候,我们便可以使用 -h 命令得到该描述信息了;
    2. 通过 type 指定参数的类型
    1
    2
    3
    4
    5
    6
    $ python3 prog.py -h
    usage: prog.py [-h] square

    positional arguments:
    square display a square of a given number
    ......
  2. 执行
    首先,如果我们不带参数执行 prog.py,可见,会报错,告诉我们 square 参数必填;

    1
    2
    3
    $ python3 prog.py
    usage: prog.py [-h] square
    prog.py: error: the following arguments are required: square

    正确执行,

    1
    2
    $ python3 prog.py 4
    16

    这里要注意的是,Positional Argument 的写法,直接写值即可,不用跟任何参数名,比如 square=4

Optional Arguments 可选参数

正好与 Positional Arguments 相对应,它表示,该参数是可有可无;

  1. 如何定义
    prog.py

    1
    2
    3
    4
    5
    6
    7
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbose", help="increase output verbosity",
    action="store_true")
    args = parser.parse_args()
    if args.verbose:
    print("verbosity turned on")

    可以看到,还是通过 ArgumentParser.add_argument 方法进行定义,区别是,前面需要跟前缀-或者--;上面的定义方式表示

    1. -v 是 –verbose 的缩写;
    2. action=”store_true” 表示,如果执行的时候只要指定了参数 -v 或者 –verbose,其解析值为 true
  2. 执行
    1
    2
    3
    4
    5
    $ python3 prog.py --verbose
    verbosity turned on
    # 或者
    $ python3 prog.py --v
    verbosity turned on

References

https://docs.python.org/3/howto/argparse.html