Python的命令行参数解析模块argparse

文章目录

  • 需求背景
  • 常用功能实践
    • optional argument
    • positional argument
    • Combining Positional and Optional arguments
  • 参考资料

需求背景

某些情况下需要在命令行环境下(window的cmd或者Linux的Terminal)完成Python脚本与命令行的交互,这种情况下就需要Python能够解析命令行参数。这种需求可以类比Linux下的各种Linux命令,比如:ls/cp src dst等等。

常用功能实践

optional argument

以下代码实践均在window环境下进行,而且前提是已经安装Python环境。如果不了解这方面,建议先阅读下面的参考教程再阅读本部分。
首先看下面的代码:

import argparse
parser=argparse.ArgumentParser(description="计算两个数字乘积")
parser.add_argument("-a","--a",help="其中一个因子a",type=int)
parser.add_argument("-b","--b",help="其中一个因子b",type=int)
args=parser.parse_args()
print(args.a,args.b)
print(args.a*args.b)

将上面的代码保存成Test0627_1.py,并在cmd环境下将目录调到test.py所在的目录,运行下面的命令

python Test0627_1.py -h

可以看到help的信息如下:
Python的命令行参数解析模块argparse_第1张图片
上述代码中首先import这个命令行解析模块,然后调用argparse.ArgumentParser()类生成一个对象parse,其中的description描述这个参数解析器是干什么的,当我们在命令行显示帮助信息的时候会看到description描述的信息。这是常规的定义parse的方法。
下面两行是利用add_argument()方法增加两个参数,一个参数是–a,一个是–b,为了方便,我们简写为-a,-b。其中的-作为通过命令行传入的可选参数(optional arguments)都是必须要有的,不能省略。后面我们会看到固定参数或者位置参数(positional arguments),这种参数可以省略-,而且是必须输入的,即使有默认值都不行的那种。
add_argument中的help是显示这个参数的作用,这个可以显示在整个help中,type=int的意思是接受的数据类型必须是int类型参数。

args=parser.parse_args()

可以认为是parser对象的实例化。实例化后的args拥有a,b两个参数,这也就解释了后面两行。
如果想输入参数,我们可以按照格式直接传入参数。
在这里插入图片描述
这肯定没有什么问题,但是如果我们不传入任何参数,程序就会直接默认传入的类型和int类型不符,如下
Python的命令行参数解析模块argparse_第2张图片
为了保证没有参数传入也是对的,我们可以加一个默认值,代码修改为:

import argparse
parser=argparse.ArgumentParser(description="计算两个数字乘积")
parser.add_argument("-a","--a",help="其中一个因子a",type=int,default=2)
parser.add_argument("-b","--b",help="其中一个因子b",type=int,default=4)
args=parser.parse_args()
print(args.a,args.b)
print(args.a*args.b)

此时再键入命令行,如果没有参数传入,将会使用默认值。如果有参传入,会使用新参。如下:
Python的命令行参数解析模块argparse_第3张图片上述例子可以接受任意的int型输入,但是对于很多情况下,False和True更为有用,请看下面的代码:

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

相比于之前的代码多了

action="store_true"

这句代码的意思是默认args.verbose是False。当action=“store_false”,就默认args.verbose是True。这部分的理解可以参照博客:
action=‘store_true’

所以会有下面的测试输出:

$ python3 prog.py --verbose
verbosity turned on
$ python3 prog.py --verbose 1
usage: prog.py [-h] [--verbose]
prog.py: error: unrecognized arguments: 1
$ python3 prog.py --help
usage: prog.py [-h] [--verbose]

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

值得注意的是带有action=“store”或者action="false"时,合法的输入只有

python3 prog.py --verbose

或者

python3 prog.py

前者的后面不能带有传入数字。这就解释了第二个测试为什么是不对的。

positional argument

相对于optional argument可选而且可以指定默认值,positional argument是用于在命令行下必须输入的参数,否则将会报错。

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.square**2)

对应的测试如下:

$ python3 prog.py 4
16
$ python3 prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: 'four'
$python3 prog.py
usage: prog.py [-h] square
prog.py: error: the following arguments are required: square

上面的第一个是正确的,第二个输入的不是int类型,第三个没有输入,故报错。

Combining Positional and Optional arguments

该部分可以参考Argparse Tutorial,只是上面Positional and Optional arguments的结合,实用性更强。

参考资料

  1. Python3.7 - Argparse模块讲解
  2. Argparse Tutorial
  3. action=‘store_true’

你可能感兴趣的:(【Python】)