文章目录
- 位置参数
- help ->描述信息
- type -> 被转换的类型
- 可选参数
- action ->动作基本类型 (store_true)
- 短选项
- 结合位置参数和可选参数
- choice
- action ->动作基本类型 (count)
- default -> 默认值
argparse模块使编写用户友好的命令行变得容易 接口。程序定义了它需要的参数,以及 argparse 我会弄清楚如何解析 sys.argv中的那些。 argparse 模块还自动生成帮助和使用消息。 模块 当用户给程序提供无效参数时,也会发出错误。
构建argparse
模块主要分为四步:
导入argparse模块
创建ArgumentParser对象:ArgumentParser对象包含将命令行解析成python数据类型所需的全部信息
添加参数:给上述创建的对象添加参数,调用add_argument()方法
解析参数:将上述添加的参数进行解析,调用parse_args()方法
位置参数
help ->描述信息
type -> 被转换的类型
import argparse
parse =argparse.ArgumentParser()
parse.add_argument('number',help="请输入数字",type=int) #指定参数必须是整型
parse.add_argument("str",help='请输入字符串',type=str) #指定参数必须是字符串类型
args=parse.parse_args()
print(args)#返回字典
print(args.number)
print(args.str)
add_argument()
方法该方法用于指定程序将能接受哪些命令行选项- 会把我们传递给它的选项视作为字符串类型,需要
type
参数指定数据类型
- 会把我们传递给它的选项视作为字符串类型,需要
可选参数
parser = argparse.ArgumentParser()
parser.add_argument('--info',help='increase output info')
args = parser.parse_args()
if args.info:
print("info turned on")
- 这一程序被设计为当指定
--info
选项时显示某些东西,否则不显示。 - 为表明此选项确实是可选的,当不附带该选项运行程序时将不会提示任何错误。 请注意在默认情况下,如果一个可选参数未被使用,则关联的变量,在这个例子中是
args.info
,将被赋值为None
,这也就是它在if
语句中无法通过真值检测的原因。 - 帮助信息有点不同。
- 使用
--info
选项时,必须指定一个值,但可以是任何值。
action ->动作基本类型 (store_true)
action是一种新的赋值方式,主要决定参数为True or False
action=‘store_true’,在运行时指定了该参数他就为True
action=‘store_false’,就是flase
parser = argparse.ArgumentParser()
parser.add_argument('--info',help='increase output info',action='store_true')
args = parser.parse_args()
if args.info:
print("info turned on")
- 现在此选项更像是一个旗标而不需要接受特定的值。 我们甚至改变了此选项的名字来匹配这一点。 请注意我们现在指定了一个新的关键词
action
,并将其赋值为"store_true"
。 这意味着,如果指定了该选项,则将值True
赋给args.verbose
。 如未指定则表示其值为False
。 - 当你为其指定一个值时,它会报错,符合作为标志的真正的精神。
短选项
import math
import argparse
parser = argparse.ArgumentParser(description="计算圆柱体的体积")#描述解析对象
parser.add_argument('-R','--radius',type = int,help = '半径')
parser.add_argument('-H','--height',type = int,help = '高')
args = parser.parse_args()
def cylinder_volume(radius,height):
vol = (math.pi)*(radius**2)*(height)
return vol
if __name__ == '__main__':
print(cylinder_volume(args.radius,args.height))
结合位置参数和可选参数
from termcolor import cprint,colored
import argparse
parser=argparse.ArgumentParser(description="计算一个数字的平方")
parser.add_argument('num',help="给一个数字",type= int)
parser.add_argument('--bool',action="store_true",help="increase output bool")
args = parser.parse_args()
answer=args.num**2
if args.bool:
print(colored(f"{args.num}的平方等于{answer}",color='red',on_color='on_white'))
else:
print(answer)
- 位置参数和可选参数的位置前后顺序无关紧要
choice
from termcolor import cprint,colored
import argparse
parser=argparse.ArgumentParser(description="计算一个数字的平方")
parser.add_argument('num',help="给一个数字",type= int)
parser.add_argument('-b','--bool',type=int,help="increase output bool",choices=[0,1,2,3,4])
args = parser.parse_args()
answer=args.num**2
if args.bool==3:
print(colored(f"{args.num}的平方等于{answer}",color='red',on_color='on_white'))
elif args.bool ==1:
print(colored(f"{args.num}^2 == {answer}",color='green'))
else:
print(answer)
action ->动作基本类型 (count)
引入了另一种动作 “count
”,来统计特定选项
出现的次数
from termcolor import cprint,colored
import argparse
parser=argparse.ArgumentParser(description="计算一个数字的平方")
parser.add_argument('num',help="给一个数字",type= int)
parser.add_argument('-b','--bool',help="increase output bool",action="count")
args = parser.parse_args()
answer=args.num**2
if args.bool==3:
print(colored(f"{args.num}的平方等于{answer}",color='red',on_color='on_white'))
elif args.bool ==1:
print(colored(f"{args.num}^2 == {answer}",color='green'))
else:
print(answer)
- 如果你不添加
-b
标志,这一标志的值会是None
解决上述报错,需要加入一个参数default
,设置默认值
default -> 默认值
from termcolor import cprint,colored
import argparse
parser=argparse.ArgumentParser(description="计算一个数字的平方")
parser.add_argument('num',help="给一个数字",type= int)
parser.add_argument('-b','--bool',help="increase output bool",action="count",default=0)
args = parser.parse_args()
answer=args.num**2
if args.bool >=3:
print(colored(f"{args.num}的平方等于{answer}",color='red',on_color='on_white'))
elif args.bool >=1:
print(colored(f"{args.num}^2 == {answer}",color='green'))
else:
print(answer)
- 默认情况下如果一个可选参数没有被指定,它的值会是
None
,并且它不能和整数值相比较(所以产生了TypeError
异常)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
parser.add_argument("-v", "--verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
if args.verbosity >= 2:
print(f"Running '{__file__}'")
if args.verbosity >= 1:
print(f"{args.x}^{args.y} == ", end="")
print(answer)