argparse
是 Python 标准库中的一个模块,用于解析命令行参数。它提供了一种灵活且强大的方式来定义和解析命令行选项和参数,并自动生成帮助和使用信息。以下是 argparse
模块的详细介绍。
1. 创建 ArgumentParser 对象
使用 argparse.ArgumentParser
类来创建一个解析器对象。
import argparse
parser = argparse.ArgumentParser(description='This is a sample script.')
-
description
参数用于提供帮助信息中的描述。
2. 添加参数
使用 add_argument
方法来添加位置参数和可选参数。
位置参数
位置参数是必须提供的参数,按顺序解析。
parser.add_argument('name', type=str, help='Your name')
可选参数
可选参数是通过前缀 -
或 --
来指定的参数。
parser.add_argument('--age', type=int, help='Your age')
parser.add_argument('-c', '--city', type=str, help='Your city')
参数类型
可以通过 type
参数指定参数的类型,如 int
、float
、str
等。
parser.add_argument('age', type=int, help='Your age')
默认值
可以使用 default
参数为可选参数设置默认值。
parser.add_argument('--age', type=int, default=25, help='Your age')
必需的可选参数
可以使用 required
参数将可选参数设置为必需的。
parser.add_argument('--age', type=int, required=True, help='Your age')
布尔类型参数
可以使用 action='store_true'
来定义布尔类型的可选参数。
parser.add_argument('--verbose', action='store_true', help='Enable verbose mode')
互斥组
可以使用互斥组来确保某一组参数中只能提供一个。
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true', help='Enable foo')
group.add_argument('--bar', action='store_true', help='Enable bar')
3. 解析参数
使用 parse_args
方法来解析命令行参数。
args = parser.parse_args()
解析后的参数将存储在 args
对象中,可以通过属性访问。
print(f'Hello, {args.name}!')
if args.age:
print(f'You are {args.age} years old.')
if args.city:
print(f'You live in {args.city}.')
4. 帮助信息
argparse
自动生成帮助信息,可以通过 -h
或 --help
选项查看。
python script.py -h
输出示例:
usage: script.py [-h] [--age AGE] [--city CITY] name
This is a sample script.
positional arguments:
name Your name
optional arguments:
-h, --help show this help message and exit
--age AGE Your age
--city CITY Your city
5. 高级用法
参数别名
可以为同一个参数定义多个名字(别名)。
parser.add_argument('-n', '--name', type=str, help='Your name')
参数数量
可以使用 nargs
参数指定参数的数量。
parser.add_argument('numbers', type=int, nargs='+', help='A list of numbers')
-
nargs='?'
:零或一个参数 -
nargs='*'
:零或多个参数 -
nargs='+'
:一个或多个参数
参数的选择范围
可以使用 choices
参数指定参数的选择范围。
parser.add_argument('--color', choices=['red', 'green', 'blue'], help='Choose a color')
参数分组
可以使用 add_argument_group
方法将参数分组,以便在帮助信息中更好地组织。
group1 = parser.add_argument_group('Group 1')
group1.add_argument('--foo', help='Foo option')
group2 = parser.add_argument_group('Group 2')
group2.add_argument('--bar', help='Bar option')
6. 完整示例
以下是一个包含多种功能的完整示例。
import argparse
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='This is a sample script.')
# 添加位置参数
parser.add_argument('name', type=str, help='Your name')
# 添加可选参数
parser.add_argument('--age', type=int, default=25, help='Your age')
parser.add_argument('-c', '--city', type=str, help='Your city')
parser.add_argument('--verbose', action='store_true', help='Enable verbose mode')
# 创建互斥组
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true', help='Enable foo')
group.add_argument('--bar', action='store_true', help='Enable bar')
# 解析命令行参数
args = parser.parse_args()
# 使用解析后的参数
print(f'Hello, {args.name}!')
print(f'You are {args.age} years old.')
if args.city:
print(f'You live in {args.city}.')
if args.verbose:
print('Verbose mode is enabled.')
if args.foo:
print('Foo is enabled.')
elif args.bar:
print('Bar is enabled.')
运行示例:
python script.py Alice --age 30 --city London --verbose --foo
输出将是:
Hello, Alice!
You are 30 years old.
You live in London.
Verbose mode is enabled.
Foo is enabled.
总结
argparse
模块提供了一种灵活且强大的方式来解析命令行参数。通过使用 ArgumentParser
对象和 add_argument
方法,可以轻松定义和解析各种类型的参数,并生成帮助信息。结合高级用法,如互斥组、参数分组和参数选择范围,可以满足复杂的命令行解析需求。如果你有更多问题或需要进一步的帮助,请随时提问。