您的位置:

Python argpase: 命令行参数解析的利器

一、什么是argparse

Python解释器能够读取命令行输入,但是当你需要输入大量参数时,手动输入命令行会变得非常繁琐。在Python中,argparse是一种处理命令行参数的标准模块。argparse让你可以轻松的编写用户友好的命令行界面。它提供了必选项、可选项、参数解析、类型限制和多项功能处理等功能。

二、使用argparse解析命令行参数

使用argparse必须先创建一个ArgumentParser对象,然后在该对象上添加选项。

import argparse

parser = argparse.ArgumentParser(description='对命令行参数进行解析')

# 添加必传选项
parser.add_argument('integers', type=int, nargs='+', help='一组数字')

# 添加可选选项
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max, help='默认返回最大值,传了该选项返回叠加和')

args = parser.parse_args()
print(args.accumulate(args.integers))

上面的代码创建了一个ArgumentParser对象,并添加了两个选项。必选项integers用来传入一组数字,可选项--sum用来选择返回叠加和还是最大值。下面是使用该代码的方式:

$ python program.py 1 2 3 4 5
5

$ python program.py 1 2 3 4 5 --sum
15

三、添加多种不同类型的参数

argparse支持多种不同类型的参数,例如字符串、整数和浮点数等。下面的示例演示如何添加多个不同类型的参数:

import argparse

parser = argparse.ArgumentParser(description='对命令行参数进行解析')

# 添加必传选项(整型)
parser.add_argument('integers', type=int, nargs='+', help='一组数字')

# 添加必传选项(浮点型)
parser.add_argument('source', type=float, help='源数字')

# 添加必传选项(字符串)
parser.add_argument('destination', type=str, help='目标字符串')

# 添加可选选项(布尔值)
parser.add_argument('--verbose', '-v', action='store_true', help='输出调试信息')

args = parser.parse_args()
print(args.integers)
print(args.source)
print(args.destination)
print(args.verbose)

上面的代码创建了一个带有多种参数类型的ArgumentParser对象,并添加了一个布尔值可选项--verbose-v。使用方式如下:

$ python program.py 1 2 3 4 5 6.5 destination -v
[1, 2, 3, 4, 5]
6.5
destination
True

四、处理互斥选项

有时候,多个选项之间可能会互相排斥。例如,使用语言选项时可能会要求只使用一个语言选项,而不能同时使用两个。在这种情况下,可以通过使用argparse框架中的mutually_exclusive_group 来实现互斥选项。

import argparse

parser = argparse.ArgumentParser(description='对命令行参数进行解析')
group = parser.add_mutually_exclusive_group()

group.add_argument('--foo', action='store_true', help='选项foo')
group.add_argument('--bar', action='store_true', help='选项bar')

args = parser.parse_args()
if args.foo:
    print('选中foo')
elif args.bar:
    print('选中bar')

上面的代码通过使用add_mutually_exclusive_group()方法创建了一个互斥组,并通过add_argument()方法向该组中添加了两个选项。argparse会确保这两个选项不能同时出现。使用方式如下:

$ python program.py --foo
选中foo

$ python program.py --bar
选中bar

$ python program.py --foo --bar
usage: program.py [-h] [--foo | --bar]
program.py: error: 不能同时指定--foo和--bar

五、处理子命令

当需要解析成一个命令行工具时,很常见的一个操作是添加子命令。例如,假设你想创建一个程序,这个程序有三个子命令,分别为startstoprestart。你希望通过调用这些子命令来启动或停止存储在数据库中的所需服务。

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser_name')
subparser_start = subparsers.add_parser('start')
subparser_stop = subparsers.add_parser('stop')

args = parser.parse_args()
if args.subparser_name == 'start':
    print('选择了start子命令')
elif args.subparser_name == 'stop':
    print('选择了stop子命令')

上面的代码创建了一个ArgumentParser对象,并添加了两个子命令:start 和 stop。使用方式如下:

$ python program.py start
选择了start子命令

$ python program.py stop
选择了stop子命令

六、总结

argparse是一个非常有用的模块,可以让你轻松的编写用户友好的命令行界面。在本文中,我们了解了如何使用argparse来处理命令行参数,包括如何添加必须选项和可选项、如何支持多种不同类型的参数和如何处理互斥选项和子命令。相信您已经理解了argparse的基本用法和实现原理。