python argparse的用法

1、基本用法:

我的prog.py文件放在桌面。

代码:

​
import argparse



parse = argparse.ArgumentParser()

parse.parse_args()

​

测试结果

  1. 第一个没有任何输出和出错
  2. 第二个打印帮助信息,argparse会自动生成帮助文档
  3. 第三个为未定义的参数-v,程序会报错

2、positional arguments

代码如下

​import argparse



parser = argparse.ArgumentParser()

parser.add_argument("echo")

args = parser.parse_args()

print(args.echo)

​

测试结果

positional arguments的用法是不用-就可以使用的,上面的代码定义了一个叫echo的参数,默认是必选的。

  1. 第一个是不带参数的,由于echo参数为空,所以报错,下面的usage给出了使用方法以及错误信息。
  2. 第二个则是打印帮助信息
  3. 第三个则是正常用法,echo了输入字符串helloworld。

3、optional arguments

可选参数,有下面两种方式:

  1. 通过-来指定短参数,比如-h
  2. 通过来指定长参数,比如--help

上面的两种方式可以共存,也可以只存在一个,代码如下:

​
import argparse



parser = argparse.ArgumentParser()

parser.add_argument('-v',"--verbosity",help="increase output verbosity")

args = parser.parse_args()

if args.verbosity:

    print("verbosity turned on")

​

首先注意下面这一行

       parser.add_argument("-v", "--verbosity", help="increase output verbosity")

该行定义了可选参数-v--verbosity,通过解析后,其值保存在args.verbosity变量中
测试结果

  1. 通过-v来指定参数值
  2. 通过—verbosity来指定参数值
  3. 通过-h来打印帮助信息
  4. 没有给-v指定参数值,所以会报错

4、action=’store_true’

上面的用法中-v必须指定参数值,否则会报错,下面通过定义参数指定action=’store_true’则不需要指定参数值,代码如下:

​
import argparse



parser = argparse.ArgumentParser()

parser.add_argument('-v',"--verbose",\

            help="increase output verbosity",action='store_true')

args = parser.parse_args()

if args.verbose:

    print("verbosity turned on")

​

测试结果

 

5、类型type

      默认的参数类型为str,如果要进行数学计算,需要对参数进行解析后进行类型转换,如果不能转换则需要报错,这样比较麻烦argparse提供了对参数类型的解析,如果类型不符合,则直接报错。如下是对参数进行平方计算的程序:

​
import argparse



parser = argparse.ArgumentParser()

parser.add_argument('x',type=int,help='the base')

args = parser.parse_args()

answer = args.x ** 2

print(answer)

​

测试结果

  1. 第一个是计算2的平方数,类型为int
  2. 第二个是一个非int类型的数,所以报错
  3. 第三个是打印帮助信息

6、可选值choices=[]

      4中的action的例子中定义了默认值为TrueFalse的方式,如果要限定某个值的取值范围,比如5中的整形,限定其取值范围为0, 1, 2,该如何进行呢?代码如下:

​
import argparse



parser = argparse.ArgumentParser()

parser.add_argument("square",type=int,\

                help="display a square of a given number")

parser.add_argument('-v',"--verbosity",type=int,choices=[0,1,2],\

                help="increase output verbosity")

args = parser.parse_args()

answer = args.square ** 2

if args.verbosity == 2:

    print("the square of {} equals {}".format(args.square,answer))

elif args.verbosity == 1:

    print("{}^2 == {}".format(args.square,answer))

else:

    print(answer)

​

测试结果

  1. 第一、二、三为可选值的范围,通过其值,打印不同格式输出
  2. 第四个的verbosity不在可选值范围之内,打印错误
  3. 第五个打印帮助信息

7、自定义帮助信息help

上面很多例子中都为help赋值,如

parser.add_argument("square", type=int, help="display a square of a given number")
在打印输出时,会有如下内

也就是help为什么的时候,打印输出时,就会显示什么。

8、程序用法帮助

上面介绍了每个参数定义帮助文档,那么给整个程序定义帮助文档该怎么进行呢?

通过argparse.ArgumentParser(description="calculate X to the power of Y")即可

import argparse



parser = argparse.ArgumentParser(description="calculate X to the power of Y")

group = parser.add_mutually_exclusive_group()

group.add_argument('-v',"--verbose",action="store_true")

group.add_argument('-q',"--quiet",action="store_true")

parser.add_argument('x',type=int,help="the base")

parser.add_argument('y',type=int,help="the exponent")

args = parser.parse_args()

answer = args.x ** args.y



if args.quiet:

    print(answer)

elif args.verbose:

    print("{} to the power {} equals {}".format(args.x,args.y,answer))

else:

    print("{}^{}={}".format(args.x,args.y,answer))

测试结果

9、互斥参数

在上面的例子中运用了互斥的参数

group = parser.add_mutually_exclusive_group()

group.add_argument('-v',"--verbose",action="store_true")

group.add_argument('-q',"--quiet",action="store_true")

在第一行中定义了互斥组,第二行、三行向互斥组中添加了-v-q两个参数

从上面的测试结果中可以看出,-q-v要么不出现,或仅出现一个都可以,同时出现就会报错。我们可定义多个互斥组。

10、参数默认值

代码如下:

import argparse



parser = argparse.ArgumentParser(description="calculate X to the power of Y")

parser.add_argument('square',type=int,\

            help="display a square of a given number")

parser.add_argument('-v',"--verbosity",type=int,choices=[0,1,2],\

            default=1,help="increase output verbosity")

args = parser.parse_args()

answer = args.square ** 2

if args.verbosity == 2:

    print("the square of {} equals {}".format(args.square,answer))

elif args.verbosity == 1:

    print("{}^2 == {}".format(args.square,answer))

else:

    print(answer)

测试结果

      可以看到如果不指定-v的值,args.verbosity的值默认为1

 

原文参考:

https://www.jianshu.com/p/fef2d215b91d

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值