argparse--命令行参数解析库

文章目录

      • 位置参数
        • 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)

argparse--命令行参数解析库_第1张图片

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

argparse--命令行参数解析库_第2张图片

  • 这一程序被设计为当指定 --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")


argparse--命令行参数解析库_第3张图片

  • 现在此选项更像是一个旗标而不需要接受特定的值。 我们甚至改变了此选项的名字来匹配这一点。 请注意我们现在指定了一个新的关键词 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))

argparse--命令行参数解析库_第4张图片

结合位置参数和可选参数

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)

argparse--命令行参数解析库_第5张图片

  • 位置参数和可选参数的位置前后顺序无关紧要

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)

argparse--命令行参数解析库_第6张图片

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)

argparse--命令行参数解析库_第7张图片

  • 如果你不添加 -b 标志,这一标志的值会是 None

argparse--命令行参数解析库_第8张图片

解决上述报错,需要加入一个参数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)

argparse--命令行参数解析库_第9张图片

  • 默认情况下如果一个可选参数没有被指定,它的值会是 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)

argparse--命令行参数解析库_第10张图片

你可能感兴趣的:(Python,python,argparse)