共计 3165 个字符,预计需要花费 8 分钟才能阅读完成。
一、为什么要解析命令行参数?
在日常的 Python 编程中,咱们常常须要编写一些可配置的脚本。这些脚本在运行时,可能须要传递一些参数,以实现不同的性能。命令行参数就是一种在启动脚本时,传递给脚本的数据。
例如,咱们编写了一个能够实现文件复制性能的脚本,那么咱们可能须要传递源文件门路和指标文件门路两个参数。这就须要解析命令行参数。
二、Python 中的 argparse 模块
Python 提供了一个解析命令行参数的规范库 argparse
。argparse
模块能够让咱们轻松编写用户敌对的命令行接口。它程序定义须要哪些参数,而后 argparse
将找出如何从 sys.argv
解析出这些参数。argparse
模块还会主动生成帮忙和使用手册,并在用户给程序传入有效参数时报出错误信息。
接下来,咱们通过一个简略的例子来介绍 argparse
的应用办法。
三、argparse 的根本应用
首先,咱们须要创立一个 ArgumentParser
对象:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser
的构造方法承受几个可选的参数,比方 description
参数能够用来形容这个程序是做什么的。当带 --help
参数运行程序时,这些形容信息会显示在帮忙信息中。
而后,咱们调用 add_argument()
办法来指定程序能承受的命令行选项:
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
这段代码增加了一个能够承受一或多个整数的地位参数,并增加了一个可选参数 --sum
。当 --sum
参数存在时,会将传入的整数求和,否则找出最大的那个数。
最初,parse_args()
办法会解析命令行参数并返回一个命名空间,蕴含传入的参数。如果用户传入了有效的参数或者申请帮忙,argparse
也会主动打印出帮忙信息并退出程序。
args = parser.parse_args()
print(args.accumulate(args.integers))
这就是 argparse
的根本应用办法。
四、argparse 的高级用法
在理解了 argparse
的根本用法后,咱们能够进一步探讨它的一些高级性能,比方子命令、参数组和参数抵触解析。
1. 子命令
有时候,咱们的程序可能须要依据不同的命令执行不同的操作。比方 git
程序,它有很多子命令,如 git clone
、git pull
等,不同的子命令会执行不同的操作。argparse
反对这种子命令的创立。
上面是一个创立子命令的例子:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='command', help='Sub-command help')
# 创立 'clone' 子命令的解析器
parser_clone = subparsers.add_parser('clone', help='clone help')
parser_clone.add_argument('repository', help='Repository to clone')
# 创立 'pull' 子命令的解析器
parser_pull = subparsers.add_parser('pull', help='pull help')
parser_pull.add_argument('repository', help='Repository to pull')
args = parser.parse_args()
if args.command == 'clone':
print(f"Cloning repository {args.repository}...")
elif args.command == 'pull':
print(f"Pulling repository {args.repository}...")
在这个例子中,咱们创立了两个子命令 ‘clone’ 和 ‘pull’,并且别离为它们增加了 ‘repository’ 参数。在解析命令行参数后,咱们能够通过 args.command
获取用户输出的子命令,而后执行相应的操作。
2. 参数组
有时候,咱们可能想把相干的参数组织在一起。argparse
提供了参数组的概念来解决这个问题。咱们能够应用 add_argument_group()
办法创立一个新的参数组,而后在这个参数组上增加参数:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_argument_group('group')
group.add_argument('--foo', action='store_true', help='Foo help')
group.add_argument('--bar', action='store_true', help='Bar help')
args = parser.parse_args()
在这个例子中,咱们创立了一个参数组,并在这个组上增加了两个参数 --foo
和 --bar
。
3. 参数抵触解析
有时候,咱们的程序可能有一些参数是互斥的,也就是说不能同时呈现。argparse
提供了 add_mutually_exclusive_group()
办法来创立一个互斥参数组,而后在这个组上增加的参数将是互斥的:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true')
group.add_argument('--bar', action='store_true')
args = parser.parse_args()
在这个例子中,咱们创立了一个互斥参数组,并在这个组上增加了两个参数 --foo
和 --bar
,这两个参数是互斥的,也就是说不能同时呈现。
如果咱们尝试执行 python script.py --foo --bar
,argparse
将会报错,提醒咱们这两个参数不能同时呈现。
五、总结
以上就是 argparse
的深刻介绍,心愿通过这篇文章,你曾经对如何应用 argparse
模块来解决命令行参数有了更深刻的了解。尽管这个模块的性能看起来比较简单,然而在理论的程序开发中,正当地应用 argparse
能够极大地提高咱们的开发效率,使咱们的程序更加灵便和弱小。
argparse
不仅提供了丰盛的参数类型和参数动作供咱们抉择,还反对子命令、参数组和参数抵触解析等高级性能。在简单的程序中,咱们甚至能够将 argparse
与其余模块联合应用,来实现更简单的性能。
然而,argparse
仅仅是 Python 提供的泛滥模块之一。为了更好地应用 Python 进行开发,咱们须要相熟并把握更多的 Python 模块。在将来的文章中,咱们将持续介绍 Python 的其余模块,心愿你能持续关注。
在这里,咱们向所有应用 Python 的开发者致敬,心愿你能在 Python 的世界中找到你的乐趣,让 Python 成为你开发的利器。