在Python中,命令行参数处理在很多情况下非常有用。Python标准库中提供了 argparse 模块实现命令行参数解析,本文将从基本概念、常用参数、多个子命令等多个方面来详细阐述。
一、基本概念
argparse 是 Python 标准库中的一个用于处理命令行参数的模块,它可以解析命令行参数,并在使用帮助功能时生成漂亮的输出。Argparse 模块提供了一种简单的方式来定义命令行参数和帮助文本,在Python脚本中使用这些参数。
argparse 模块中最常用的对象是 ArgumentParser。当创建 ArgumentParser 对象时,可以向它添加参数和参数组。
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
定义了 ArgumentParser 对象之后,就可以向它中添加参数了。
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)')
最后,使用 ArgumentParser 对象的 parse_args() 方法将解析好的参数打包到一个 Namespace 对象中。
args = parser.parse_args()
print(args.accumulate(args.integers))
二、常用参数
argparse 允许添加很多种不同类型的参数,一些常用的参数如下所述。
1. 位置参数
位置参数是在解析器读取时按定义顺序读取并解析的参数。当定义位置参数时,会指定参数名称和数据类型。
parser.add_argument("echo", help="echo the string you use here")
2. 可选参数
可选参数是指用户不必指定的参数。即,用户可以省略该参数并使用默认值。可选参数需要指定一个参数标志(或称选项)和相应的数据类型。
parser.add_argument("--verbosity", help="increase output verbosity")
可选参数也可以使用简短选项标志。在 argparse 模块中,这被称为短选项。短选项是仅由一个字符组成的参数标志,通常用在命令行中可重用计数器或开关上。例如 -v 用于指定输出冗余程度。
parser.add_argument("-v", "--verbose", help="increase output verbosity",
action="store_true")
3. 互斥参数
argparse 中可以处理互斥参数。互斥参数是指,在命令行中不可能同时指定的两个参数。例如,在 ls 命令中,指定 -a 和 -l 是互斥的。在 argparse 中,可使用 mutually_exclusive_group() 定义一个互斥参数。
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
4. 带参数的选项
在 argparse 中,选项也可以带参数,例如 -f file 或 –file file。参数类型可以是任意托管的 Python 基本类型。此外,还可以将单个参数视为多个参数,例如一个字符串列表,一个整数或一个文件。
parser.add_argument("-f", "--file",
help="specify an output file",
metavar="FILE")
三、多个子命令
argparse 模块还支持多个子命令的处理,即 Python 脚本可以支持多个命令。
使用 add_subparsers() 方法创建一组子命令。对于每个子命令,创建一个子解析器并添加一个新参数属性命名为 func。
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# create the parser for the "spam" command
parser_a = subparsers.add_parser('a')
parser_a.set_defaults(func=a)
# create the parser for the "bacon" command
parser_b = subparsers.add_parser('b')
parser_b.set_defaults(func=b)
在定义好子解析器之后,您可以根据命名空间执行任何命令。
args = parser.parse_args()
args.func(args)
四、完整代码
import argparse
def a(args):
print("This is command a")
def b(args):
print("This is command b")
# Create the parser
parser = argparse.ArgumentParser()
# create subparsers
subparsers = parser.add_subparsers()
# create the parser for the "a" command
parser_a = subparsers.add_parser("a")
parser_a.set_defaults(func=a)
# create the parser for the "b" command
parser_b = subparsers.add_parser("b")
parser_b.set_defaults(func=b)
# Parse the args
args = parser.parse_args()
args.func(args)
五、总结
argparse 模块非常方便,可以轻松地处理命令行参数。本文介绍了 argparse 模块的基本概念、常用参数和多个子命令等多个方面,对于使用 argparse 模块的 Python 开发者有很大帮助。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/161059.html
微信扫一扫
支付宝扫一扫