我的prog.py文件放在桌面。
代码:
import argparse
parse = argparse.ArgumentParser()
parse.parse_args()
测试结果
-v
,程序会报错代码如下
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
测试结果
positional arguments的用法是不用-就可以使用的,上面的代码定义了一个叫echo的参数,默认是必选的。
可选参数,有下面两种方式:
-
来指定短参数,比如-h
—
来指定长参数,比如--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
变量中
测试结果
-v
来指定参数值—verbosity
来指定参数值-h
来打印帮助信息-v
指定参数值,所以会报错上面的用法中-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")
测试结果
默认的参数类型为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)
测试结果
4中的action
的例子中定义了默认值为True
和False
的方式,如果要限定某个值的取值范围,比如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)
测试结果
上面很多例子中都为help赋值,如
parser.add_argument("square", type=int, help="display a square of a given number")
在打印输出时,会有如下内容
也就是help为什么的时候,打印输出时,就会显示什么。
上面介绍了每个参数定义帮助文档,那么给整个程序定义帮助文档该怎么进行呢?
通过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))
测试结果
在上面的例子中运用了互斥的参数
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
要么不出现,或仅出现一个都可以,同时出现就会报错。我们可定义多个互斥组。
代码如下:
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