Python—argparse用法
初步使用
import argparse
parser = argparse.ArgumentParser(description=“your messages”) # 创建解析对象
# description 可以用于插入描述脚本用途的信息,也可以为空
parser.add_argument() #在对象中添加命令行参数和选项
parser.parse_args() # 进行解析
>> python demo.py -h # 查看帮助文档
位置参数 positional arguments
位置参数默认必选,需输入;若不输入则报错。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("pos_param", help="参数描述信息")
args = parser.parse_args()
print(args.pos_param)
>> python demo.py hello
>> hello
可选参数 optional arguments
-指定短参数,如 -h
--指定长参数,如 --help
这两种方式可以同存,也可以只存在一个。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", help="添加输出 verbosity")
args = parser.parse_args()
if args.v:
print("打开 verbosity")
>> python demo.py -v hello
>> hello
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="添加输出 verbosity")
args = parser.parse_args()
if args.verbosity:
print(args.verbosity)
>> python demo.py --verbosity hello
>> hello
同时存在两个参数(长 + 短),可在命令行中通过 -v 或 --verbosity 来为参数赋值。
但args中保存的参数为长参数verbosity,无短参数v,调用args.v 将报错
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="添加输出 verbosity")
args = parser.parse_args()
if args.verbosity:
print(args.verbosity)
>> python demo.py -v hello
或
>> python demo.py --verbosity hello
>> hello
action = “store_true”
添加action = “store_true” 后,无需指定参数值;若命令行中出现 --verbosity,则其值为True
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="添加输出 verbosity", action = "store_true")
args = parser.parse_args()
if args.verbosity:
print(args.verbosity)
>> python demo.py --verbosity
>> True
参数类型type
默认的参数类型为str,若要进行数学计算,则需要在参数解析后进行类型转换。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-x", type=int, help="输入数字")
args = parser.parse_args()
y = args.x
print(y, type(y))
>> python demo.py -x 3
>> 3 <class 'int'>
可选值 choices=[]
action可定义参数的默认值为True和False;若要限制某个值的取值范围,可使用choices。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-x", type=int, choices=[1, 2, 3], help="输入数字")
args = parser.parse_args()
y = args.x
print(y, type(y))
>> python demo.py -x 4
>> error: argument -x: invalid choice: 4 (choose from 1, 2, 3)
>> python demo.py -x 3
>> 3 <class 'int'>
互斥参数
通过创建互斥组,使得互斥组中的参数只能出现一个
import argparse
parser = argparse.ArgumentParser()
# 添加互斥组
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", action="store_true")
group.add_argument("-q", action="store_true")
parser.add_argument("-x", action="store_true")
args = parser.parse_args()
if args.q:
print(args.q)
if args.v:
print(args.v)
>> python demo.py -h
>> usage: demo.py [-h] [-v | -q] [-x]
>> python demo.py -v -q
>> error: argument -q: not allowed with argument -v
>> python demo.py -v
>> True
参数默认值
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-x", type=int, default=1, help="输入数字")
args = parser.parse_args()
if args.x:
print(args.x)
>> python demo.py
>> 1
>> python demo.py -x 3
>> 3