欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力
对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
专栏:
文章概述:对通过argparse模块接收命令行参数(设置必填参数、可选参数、设置参数类型、设置选择性参数、默认参数、count参数、互斥参数)的介绍
关键词:argparse模块接收命令行参数 设置必填参数、可选参数、设置参数类型、设置选择性参数、默认参数、count参数、互斥参数
本文目录:
引言:
前面一篇博客 通过sys模块接收命令行参数 中我讲到了用sys模块的sys.argv[]来获取参数
这篇博文我将详细讲解通过argparse模块接收命令行参数(设置必填参数、可选参数)
设置必填参数
from argparse import ArgumentParser
parser = ArgumentParser()
#添加一个命令行参数
parser.add_argument('echo', help='the given string')
# 解析命令行参数
args = parser.parse_args()
# 使用提供的参数
print(args.echo)
不填就报错
from argparse import ArgumentParser
ArgumentParser是 argparse下的一个类
parser.add_argument('echo', help='the given string')
使用了 ArgumentParser
类的 add_argument
方法来添加一个命令行参数。这里的 'echo'
是一个位置参数(positional argument),意味着它在命令行中的位置是重要的,并且用户必须按照程序期望的顺序提供这个参数。
参数 'echo'
后面跟着的 help='the given string'
是一个可选的关键字参数,它提供了关于这个命令行参数的简短描述。当用户运行程序并附带 --help
选项时,这个描述会显示在帮助信息中。
在终端中执行命令
python .\40_Python命令行参数argparse获取.py hello
返回了一个hello,这是因为调用了print(args.echo) 程序将hello传给echo这个参数
还可以设置参数类型
parser.add_argument('square', help='Squares a given number', type=int)
print(args.square ** 2)
如果不是int类型的参数
python .\40_Python命令行参数argparse获取.py hello
就会报错
是int
python .\40_Python命令行参数argparse获取.py 2
Python中添加可选参数
如果希望将 -v
参数作为布尔开关(启用或禁用详细输出),需要使用 action='store_true'
action='store_true'
:
- 这是用于布尔开关类型的参数。指定了该参数时,
args.verbose
被设置为True
,否则为False
。 - 它不需要额外的值,只是一个标志。
from argparse import ArgumentParser
#实例化这个类
parser = ArgumentParser()
# 添加 square 参数
parser.add_argument('square', help='计算给定数字的平方', type=int)
# 添加 verbose 参数
#给help提示 给两个可选参数 默认有这两个参数为真
#布尔开关参数:action='store_true'
parser.add_argument('-v', '--verbose', help='启用详细输出', action='store_true')
args = parser.parse_args()
#如果加了这两个参数
if args.verbose:
print(f'{args.square} squared is {args.square ** 2}')
else:
print(args.square ** 2)
设置为必填项
required=True
from argparse import ArgumentParser
#实例化这个类
parser = ArgumentParser()
# 添加 square 参数
parser.add_argument('square', help='计算给定数字的平方', type=int)
# 添加 verbose 参数
#给help提示 给两个可选参数 默认有这两个参数为真
parser.add_argument('-v', '--verbose', help='启用详细输出', action='store_true', required=True)
args = parser.parse_args()
#如果加了这两个参数,args.verbose就会判定为真
if args.verbose:
print(f'{args.square} squared is {args.square ** 2}')
else:
print(args.square ** 2)
添加选择性参数
想让 -v
参数接受不同的值(如 0、1、2),并根据这些值输出不同的结果
from argparse import ArgumentParser
# 实例化解析器
parser = ArgumentParser()
# 添加 verbose 参数
parser.add_argument('-v', '--verbose', help='设置详细级别', type=int, choices=[0, 1, 2], required=True)
# 解析参数
args = parser.parse_args()
# 根据 verbose 参数输出不同的结果
if args.verbose == 0:
print("详细级别为 0:基本信息")
elif args.verbose == 1:
print("详细级别为 1:中等详细信息")
elif args.verbose == 2:
print("详细级别为 2:详细信息")
设置默认参数
default=3
from argparse import ArgumentParser
# 实例化解析器
parser = ArgumentParser()
parser.add_argument('-s', '--square', help='Squares a given number', type=int, default=3)
# 添加 verbose 参数
parser.add_argument('-v', '--verbose', help='设置详细级别', type=int, choices=[0, 1, 2], required=True)
# 解析参数
args = parser.parse_args()
# 根据 verbose 参数输出不同的结果
if args.verbose == 0:
print("详细级别为 0:基本信息",f'{args.square} squared is {args.square ** 2}')
elif args.verbose == 1:
print("详细级别为 1:中等详细信息",f'squared is {args.square ** 2}')
elif args.verbose == 2:
print("详细级别为 2:详细信息",args.square ** 2)
自己给定参数5,就会覆盖默认参数3
设置count参数
action='count'对-v的v出现次数进行判断
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('a', type=int, help='base value')
parser.add_argument('b', type=int, help='exponent')
group.add_argument('-v', '--verbose', action='count', help='')
args = parser.parse_args()
result = args.a ** args.b
if args.verbose == 1:
print(f'the result is {result}')
elif args.verbose == 2:
print(f'{args.a}**{args.b}={result}')
else:
print(result)
互斥参数
有s就为真,没s就为false,对v出现次数进行判断
from argparse import ArgumentParser
parser = ArgumentParser()
# 如果参数互相冲突,只允许出现二者之一
group = parser.add_mutually_exclusive_group()
parser.add_argument('a', type=int, help='base value')
parser.add_argument('b', type=int, help='exponent')
group.add_argument('-v', '--verbose', action='count', help='')
group.add_argument('-s', '--silence', action='store_true', help='Generate a silent version of the output')
args = parser.parse_args()
result = args.a ** args.b
if args.silence:
print('Silenced')
else:
if args.verbose:
if args.verbose == 1:
print(f'the result is {result}')
elif args.verbose == 2:
print(f'{args.a}**{args.b}={result}')
else:
print(result)
可以自己定义usage
from argparse import ArgumentParser
parser = ArgumentParser()
parser.usage = 'Use it like this ......'
# 如果参数互相冲突,只允许出现二者之一
group = parser.add_mutually_exclusive_group()
parser.add_argument('a', type=int, help='base value')
parser.add_argument('b', type=int, help='exponent')
group.add_argument('-v', '--verbose', action='count', help='')
group.add_argument('-s', '--silence', action='store_true', help='Generate a silent version of the output')
args = parser.parse_args()
result = args.a ** args.b
if args.silence:
print('Silenced')
else:
if args.verbose:
if args.verbose == 1:
print(f'the result is {result}')
elif args.verbose == 2:
print(f'{args.a}**{args.b}={result}')
else:
print(result)