python argparse action_python argparse 用法总结

import argparse:首先导入模块

parser = argparse.ArgumentParser(description="your script description"):创建一个解析对象,description 参数可以用于插入描述脚本用途的信息,可以为空

parser.add_argument():向该对象中添加你要关注的命令行参数和选项

parser.parse_args():进行解析

在多个文件或者不同语言协同的项目中,python 脚本经常需要从命令行直接读取参数。下面我们通过几个例子来学习 argparse。

我们先创建一个脚本 prog.py,然后输入如下内容:

import argparse

parser = argparse.ArgumentParser()

parser.parse_args()

下面我们在 shell 中进行测试:

1

第 1 个没有任何输出和出错

第 2、3 个测试为打印帮助信息,argparse 会自动生成帮助文档,-h 为短写

第 4 个测试为未定义的 -v 参数,会出错

第 5 个测试为未定义的参数 df,出错

我们可以看出:prog.py 仅仅只有可选参数 -help 与其短写 -h,为了传入更加复杂的参数,下面我们需要借用 parser.add_argument()。

1 位置参数

positional arguments

用法是不用带 -,改写 prog.py 为

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("e")

args = parser.parse_args()

print(args.e)

测试结果:

2

定义了一个叫 e 的参数,默认必选,分析:

第 1 个测试为不带参数,由于 e 参数为空,所以报错,并给出用法(usage)和错误信息

第 2 个测试为打印帮助信息

第 3 个测试为正常用法,回显了输入字符串 Hi

2 可选参数

optional arguments,有两种方式:

- 指定的短参数,如 -h

-- 指定的长参数,如 --help

这两种方式可以同存,也可以只存在一个,修改 prog.py 内容如下:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("-v", "--verbosity", help="添加输出 verbosity")

args = parser.parse_args()

if args.verbosity:

print("打开 verbosity")

测试结果:

3

通过图 3 我们很容易便明白可选参数的用法,但是 -v 必须指定参数值,否则就会报错,有没有像 -h 那样,不需要指定参数值的呢,答案是有,通过定义参数时指定action="store_true" 即可,用法如下:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("-v", "--verbose", help="增加输出 verbosity",

action="store_true")

args = parser.parse_args()

if args.verbose:

print("打开 verbosity")

测试结果:

4

-v 没有指定任何参数也可,其实存的是 True 和 False,如果出现,则其值为True,否则为 False:

5

3 类型 type

默认的参数类型为 str,如果要进行数学计算,需要在参数进行解析后进行类型转换,如果不能转换则会报错:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('x', type=int, help="输入数字")

args = parser.parse_args()

y = args.x

answer = y ** 3 + y + 1

print(answer)

测试与结果:

6

4 可选值 choices=[]

2 中的 action 的例子中定义了默认值为 True 和 False 的方式,如果要限定某个值的取值范围,比如 3 中的整型,限定其取值范围为 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)

测试结果:

7

5 程序用法帮助

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

打印帮助信息时即显示 calculate X to the power of Y:

8

6 互斥参数

上个例子中定义了互斥参数:

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

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

第 1 行定义了一个互斥组,第 2, 3 行在互斥组中添加了 -v 和 -q 两个参数,用上个例子中的程序进行如下测试:

9

可以看出,-q 和 -v 不出现,或仅出现一个都可以,同时出现就会报错。

7 参数默认值

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)

测试结果如下:

10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值