本文参考Argparse Tutorial — Python 3.11.1 documentation
argparse是Python标准库中推荐的命令行解析模块。如果使用命令行运行python脚本并且需要传参数给脚本,就可以用该模块。
基本用法
# test.py
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
仅仅在test.py文件中添加以上代码,通过命令行运行该脚本并添加参数-h
就会有帮助信息输出,没有这段代码添加任何参数都不起作用。
python test.py -h
引入位置选项
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
- 这段代码规定了命令行需要传入一个位置参数,参数值由
echo
变量接收,如果不传递该位置参数执行命令将会报错。 add_argument()
指定命令行接受什么样的参数parse_args()
解析参数,返回从命令行中接收到的数据
add_argument()
的help和type参数
parser.add_argument("echo",help="echo the string you use here",type=int)
默认情况将参数视为字符串,设置type=int
将参数解析为整型。
引入可选选项
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print("verbosity turned on")
- 这段程序实现了:命令行指定
--verbosity
时会展示一段文字,不指定时不展示 - 命令行指定
--verbosity
时必须跟一个值,不指定时,与该option对应的变量args.verbosity
有默认值None
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
action="store_true")
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")
- 这个程序中,option更像是一个flag。我们添加了一个新关键字
action="store_true"
,意思是命令行指定--verbose
时,arg.verbose=True
,否则arg.verbose=False
。 - 命令行指定
--verbose
时,后面跟值会报错,这种写法真正意义上实现了flag
短选项
为option设置简单的name
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")
add_argument()参数总结
- help
- type
- action
- action="store_true" 该option对应的变量变成flag,值为True或False,指定option时为True,不指定时为False
- action="count" 该option对应的变量值为option出现的次数
- choices 如
choices=[0,1,2]
,命令行该option后跟的值必须是0,1,2中的一个,其他值会报错 - default
冲突选项
通过add_mutually_exclusive_group()
实现两个option不能同时出现。
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(f"{args.x} to the power {args.y} equals {answer}")
else:
print(f"{args.x}^{args.y} == {answer}")
ArgumentParser()
的关键字参数description
描述了命令行所执行的脚本的作用。