关于python:Python-中的命令行参数解析argparse-模块深入讲解

7次阅读

共计 3165 个字符,预计需要花费 8 分钟才能阅读完成。

一、为什么要解析命令行参数?

在日常的 Python 编程中,咱们常常须要编写一些可配置的脚本。这些脚本在运行时,可能须要传递一些参数,以实现不同的性能。命令行参数就是一种在启动脚本时,传递给脚本的数据。

例如,咱们编写了一个能够实现文件复制性能的脚本,那么咱们可能须要传递源文件门路和指标文件门路两个参数。这就须要解析命令行参数。

二、Python 中的 argparse 模块

Python 提供了一个解析命令行参数的规范库 argparseargparse 模块能够让咱们轻松编写用户敌对的命令行接口。它程序定义须要哪些参数,而后 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 clonegit 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 --barargparse 将会报错,提醒咱们这两个参数不能同时呈现。

五、总结

以上就是 argparse 的深刻介绍,心愿通过这篇文章,你曾经对如何应用 argparse 模块来解决命令行参数有了更深刻的了解。尽管这个模块的性能看起来比较简单,然而在理论的程序开发中,正当地应用 argparse 能够极大地提高咱们的开发效率,使咱们的程序更加灵便和弱小。

argparse 不仅提供了丰盛的参数类型和参数动作供咱们抉择,还反对子命令、参数组和参数抵触解析等高级性能。在简单的程序中,咱们甚至能够将 argparse 与其余模块联合应用,来实现更简单的性能。

然而,argparse 仅仅是 Python 提供的泛滥模块之一。为了更好地应用 Python 进行开发,咱们须要相熟并把握更多的 Python 模块。在将来的文章中,咱们将持续介绍 Python 的其余模块,心愿你能持续关注。

在这里,咱们向所有应用 Python 的开发者致敬,心愿你能在 Python 的世界中找到你的乐趣,让 Python 成为你开发的利器。

正文完
 0