概述
argparse是python命令行的解析器,用于解析python命令行模式的选项和参数。
使用的基本流程如下
import argparse
# 程序实现一个简单的功能,返回x的y次幂
#1、创建一个parser
parser = argparse.ArgumentParser()
#2、添加参数选项
parser.add_argument("x", help="the base", type=int)
parser.add_argument("y", help="the exponent", type=int)
#3、获取参数
args = parser.parse_args()
#4、对参数进行自定义处理
answer = args.x**args.y
print(answer)
程序名保存为test1.py。运行方式及输出结果为:
$ python test1.py 2 3
8
$ python test1.py -h
usage: test1.py [-h] x y
positional arguments:
x
the base
y
the exponent
optional arguments:
-h, --help
show this help message and exit
以下是一些基本的 用法
1、添加位置参数
位置参数为程序运行时必不可少的参数。上述使用流程中,x和y即为位置参数。程序运行时缺少x/y参数时会报错。如下
$ python test1.py
usage: test1.py [-h] x y
test1.py: error: the following arguments are required: x, y
2、添加可选参数
下面一段程序添加了可选参数--verbosity,并根据给定参数值的不同给出不同形式的输出:
import argparse
parser = argparse.ArgumentParser()
# 添加位置参数
parser.add_argument("x", help="the base", type=int)
parser.add_argument("y", help="the exponent", type=int)
# 添加可选参数
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
answer = args.x**args.y
# 根据参数值的不同,给出不同的输出样式
if args.verbose >= 2:
print("{} to the power of {} equals {}".format(args.x, args.y, answer))
elif args.verbose >= 1:
print("{}^{}={}".format(args.x, args.y, answer))
else:
print(answer);
运行结果如下:
$ python test1.py -h
usage: test1.py [-h] [--verbose VERBOSE] x y
positional arguments:
x
the base
y
the exponent
optional arguments:
-h, --help
show this help message and exit
--verbose VERBOSE
increase output verbosity
$ python test1.py 2 3 --verbose 1
2^3=8
$ python test1.py 2 3 --verbose 2
2 to the power of 3 equals 8
3、添加短选项
我们添加的可选参数“--verbose”,可以通过添加短选项来简化使用,即:
parser.add_argument("-v", "--verbose", help="increase output verbosity", type=int)
$ python test1.py 2 3 -v 1
2^3=8
4、添加标志性参数。添加参数时,使用action参数实现标志性参数的添加,常用的场景有action="store_true"和action="count"。
(1)store_true标记。还是以--verbose为例,如果使用store_true标记,即运行程序时加上该参数和不加该参数会有不同的运行效果,相当于给--verbose加了一个ture和false的标记,使用该参数为true,不适用时为false。具体使用方法和运行效果如下:
import argparse
parser = argparse.ArgumentParser()
# 添加位置参数
parser.add_argument("x", help="the base", type=int)
parser.add_argument("y", help="the exponent", type=int)
# 添加标志性参数
parser.add_argument("--verbosity", help="increase output verbosity", action="store_true")
args = parser.parse_args()
answer = args.x**args.y
# 根据参数值的不同,给出不同的输出样式
if args.verbose:
print("{} to the power of {} equals {}".format(args.x, args.y, answer))
else:
print(answer);
$ python test1.py 2 3
8
$ python test1.py 2 3 -v
2 to the power of 3 equals 8
(2)count标记用来记录某个参数出现的次数,如运行程序时使用“-v”和“-vv”会对应到不同的输出形式。添加-v参数时,还有一个“default=0”的项,这里是因为-v的参数如果不传,系统的默认值为None,在if语句判断时,会报错。此处将默认值设为0。
import argparse
parser = argparse.ArgumentParser()
# 添加位置参数
parser.add_argument("x", help="the base", type=int)
parser.add_argument("y", help="the exponent", type=int)
# 添加互斥的参数
groups = parser.add_mutually_exclusive_group()
groups.add_argument("-v", "--verbose", help="increase output verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
# 根据参数值的不同,给出不同的输出样式
if args.verbose >= 2:
print("{} to the power of {} equals {}".format(args.x, args.y, answer))
elif args.verbose >= 1:
print("{}^{}={}".format(args.x, args.y, answer))
else:
print(answer)
# -v的参数个数不同,有不同的输出效果
$ python test1.py 2 3 -vv
2 to the power of 3 equals 8
$ python test1.py 2 3 -v
2^3=8
$ python test1.py 2 3
8
6、添加互斥参数
添加互斥参数首先要使用add_mutually_exclusive_group()为parser添加一个互斥组,然后向组中添加具有互斥关系的参数。
import argparse
parser = argparse.ArgumentParser()
# 添加位置参数
parser.add_argument("x", help="the base", type=int)
parser.add_argument("y", help="the exponent", type=int)
# 添加互斥的参数
groups = parser.add_mutually_exclusive_group()
groups.add_argument("-q", "--quiet", help="keep silent""--quiet", action="store_true")
groups.add_argument("-v", "--verbose", help="increase output verbosity", action="count")
args = parser.parse_args()
answer = args.x**args.y
# 根据参数值的不同,给出不同的输出样式
if args.verbose:
print("{} to the power of {} equals {}".format(args.x, args.y, answer))
elif args.quiet:
print(answer)
else:
print("{}^{}={}".format(args.x, args.y, answer))
# 同时使用-q和-v参数时,程序报错,从usage信息中可以看出-q和-v参数互斥
$ python test1.py 2 3 -q -v
usage: test1.py [-h] [-q | -v] x y
test1.py: error: argument -v/--verbose: not allowed with argument -q/--quiet
7、运行时打印帮助信息
使用“-h”或“--help”参数可以打印程序的帮助信息。但如果想在程序运行时同时打印帮助信息可以使用print_help()和print_usage()函数实现。print_help()可以在程序运行时主动打印完整的帮助信息。print_usage()则打印简短的帮助信息,用于提示用户程序的调用方法。这两个方法均需在参数添加完成后使用。
import argparse
parser = argparse.ArgumentParser()
# 添加位置参数
parser.add_argument("x", help="the base", type=int)
parser.add_argument("y", help="the exponent", type=int)
# 添加互斥的参数
groups = parser.add_mutually_exclusive_group()
groups.add_argument("-q", "--quiet", help="keep silent""--quiet", action="store_true")
groups.add_argument("-v", "--verbose", help="increase output verbosity", action="count")
args = parser.parse_args()
answer = args.x**args.y
# 打印帮助信息
parser.print_usage()
# parser.print_help()
# 根据参数值的不同,给出不同的输出样式
if args.verbose:
print("{} to the power of {} equals {}".format(args.x, args.y, answer))
elif args.quiet:
print(answer)
else:
print("{}^{}={}".format(args.x, args.y, answer))
参考链接:
https://docs.python.org/zh-cn/3/howto/argparse.html
https://docs.python.org/3/library/argparse.html#module-argparse
最后
以上就是鲜艳豌豆为你收集整理的Python argparse模块学习笔记的全部内容,希望文章能够帮你解决Python argparse模块学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复