Argparse解析

这篇文章很早就想写了,拖了好久哦~ 不废话了,直奔主题


argparse是一个命令行参数解析模块

先看一个小栗子看看这个模块是怎么使用的:

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

将上面几行代码保存成脚本文件prog.py,并在命令行运行这个脚本文件:

(tf13) D:\study\csdn>python prog.py

(tf13) D:\study\csdn>python prog.py --help
usage: prog.py [-h]

optional arguments:
  -h, --help  show this help message and exit

(tf13) D:\study\csdn>python prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo

可以看出输入不同的命令,打印出的结果不同.不加任何选项情况直接运行脚本文件没有任何输出;–help选项,也可以缩短为-h,是一个帮助信息,是我们免费获得的唯一选项(即无需指定);此时指定其他任何内容都会导致错误(参数未识别)


添加位置参数

在脚本文件中添加代码:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

通过add_argument()方法添加参数,此时运行脚本文件:

(tf13) D:\study\csdn>python prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo

(tf13) D:\study\csdn>python prog.py --help
usage: prog.py [-h] echo

positional arguments:
  echo

optional arguments:
  -h, --help  show this help message and exit

(tf13) D:\study\csdn>python prog.py foo
foo

输入第一条命令时,返回一条错误信息(error: the following arguments are required: echo),因此添加完位置参数,必须在命令行中指定,不然会报错;第二条命令在命令行添加了--help选项,这是一条帮助信息,告诉你需要一个位置参数echo;通过第二条命令,我们在命令行指定了位置参数foo,脚本文件中的print(args.echo)代码则将赋给echo的参数foo打印了出来


添加帮助信息

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print(args.echo)

此时在命令行输出帮助信息:

D:\study\csdn>python prog.py --help
usage: prog.py [-h] echo

positional arguments:
  echo        echo the string you use here

optional arguments:
  -h, --help  show this help message and exit

添加可选参数

可选参数与位置参数最大的区别就是不用在命令行指定,添加可选参数,需要在参数前加--

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
    print("verbosity turned on")

命令行输出

D:\study\csdn>python prog.py --verbosity 1
verbosity turned on

D:\study\csdn>python prog.py

D:\study\csdn>python prog.py --help
usage: prog.py [-h] [--verbosity VERBOSITY]

optional arguments:
  -h, --help            show this help message and exit
  --verbosity VERBOSITY
                        increase output verbosity

对比第一条与第二条命令的输出可以看出,命令行不指定--verbosity也不会报错。


如果想要输入的参数只有TrueFalse两个值,可以添加新的关键字action,并将其值设置为‘store_true’.这表明指定了该选项,则将True分配给args.verbose,未指定则表示为False

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
                    action="store_true")
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")

输出:

(tf13) D:\study\csdn>python prog.py --verbose
verbosity turned on

(tf13) D:\study\csdn>python prog.py --verbose 1
usage: prog.py [-h] [--verbose]
prog.py: error: unrecognized arguments: 1

(tf13) D:\study\csdn>python prog.py --help
usage: prog.py [-h] [--verbose]

optional arguments:
  -h, --help  show this help message and exit
  --verbose   increase output verbosity

此时将参数指定为1会报错


短选项

短选项的用法非常简单,具体用法:

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

然后输出:

(tf13) D:\study\csdn>python prog.py -v
verbosity turned on

(tf13) D:\study\csdn>python prog.py --help
usage: prog.py [-h] [-v]

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  increase output verbosity

结合位置和可选参数

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true",
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
    print("the square of {} equals {}".format(args.square, answer))
else:
    print(answer)

其中square是位置参数,并且指定为一个整型数,verbose是可选参数,输出:

(tf13) D:\study\csdn>python prog.py
usage: prog.py [-h] [-v] square
prog.py: error: the following arguments are required: square

(tf13) D:\study\csdn>python prog.py 4
16

(tf13) D:\study\csdn>python prog.py 4 --verbose
the square of 4 equals 16

(tf13) D:\study\csdn>python prog.py --verbose 4
the square of 4 equals 16

在命令行指定可选参数与位置参数的顺序无关紧要

接下来再举几个栗子吧

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

输出:

D:\study\csdn>python prog.py 4
16

D:\study\csdn>python prog.py 4 -v
usage: prog.py [-h] [-v VERBOSITY] square
prog.py: error: argument -v/--verbosity: expected one argument

D:\study\csdn>python prog.py 4 -v 1
4^2 == 16

D:\study\csdn>python prog.py 4 -v 2
the square of 4 equals 16

D:\study\csdn>python prog.py 4 -v 3
16

我们还可以限制–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)

可以看出,此时verbosity被限制在了0,1,2三个数之间:

D:\study\csdn>python prog.py 4 -v 3
usage: prog.py [-h] [-v {0,1,2}] square
prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)

D:\study\csdn>python prog.py 4 -h
usage: prog.py [-h] [-v {0,1,2}] square

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

D:\study\csdn>python prog.py 4 -v 1
4^2 == 16

action的另一个操作:count,可以计算特定可选参数的出现次数。

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)

输出:

D:\study\csdn>python prog.py 4
16

D:\study\csdn>python prog.py 4 -v
4^2 == 16

D:\study\csdn>python prog.py 4 -vv
the square of 4 equals 16

D:\study\csdn>python prog.py 4 --verbosity --verbosity
the square of 4 equals 16

D:\study\csdn>python prog.py 4 -v 1
usage: prog.py [-h] [-v] square
prog.py: error: unrecognized arguments: 1

D:\study\csdn>python prog.py 4 -h
usage: prog.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

D:\study\csdn>python prog.py 4 -vvv
16

互相冲突的选项

最后介绍冲突选项: add_mutually_exclusive_group()可以允许我们指定相互冲突的选项。

import argparse

parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y

if args.quiet:
    print(answer)
elif args.verbose:
    print("{} to the power {} equals {}".format(args.x, args.y, answer))
else:
    print("{}^{} == {}".format(args.x, args.y, answer))

输出:

D:\study\csdn>python prog.py --help
usage: prog.py [-h] [-v | -q] x y

calculate X to the power of Y

positional arguments:
  x              the base
  y              the exponent

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose
  -q, --quiet

D:\study\csdn>python prog.py 4 2
4^2 == 16

D:\study\csdn>python prog.py 4 2 -q
16

D:\study\csdn>python prog.py 4 2 -v
4 to the power 2 equals 16

D:\study\csdn>python prog.py 4 2 -vq
usage: prog.py [-h] [-v | -q] x y
prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

帮助文档中的[-v | -q]告诉我们可以使用-v或-q,但不能同时使用~


写在最后:

更具体的内容可以参考:https://docs.python.org/3/howto/argparse.html#conflicting-options
继续加油吧~ 又是美好的一天~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值