argparse 是 Python 的标准库模块,不需要单独安装!

这意味着只要你安装了 Python,就已经拥有了 argparse,你可以直接在你的代码中通过 import argparse 来使用它。
为什么不需要安装?
argparse 自 Python 2.7 和 Python 3.2 版本起就被纳入了标准库,除非你使用的是非常古老且不再受支持的 Python 版本(Python 2.6 或更早),否则你无需进行任何安装操作。
如何确认你的 Python 版本? 在你的终端或命令行中运行:
python --version # 或者对于 Python 3 python3 --version
只要版本号大于 2.7 或 3.2,你就可以放心使用 argparse。

如何使用 argparse (核心教程)
argparse 的主要目的是让编写用户友好的命令行接口变得容易,你的程序只需定义好它需要哪些参数,argparse 就会自动生成帮助信息和使用说明。
下面我们通过一个完整的例子来学习它的基本用法。
目标
创建一个名为 my_script.py 的脚本,它可以接收两个数字,一个操作符,并打印计算结果,它需要支持 -h 或 --help 参数来显示帮助信息。
步骤 1: 创建脚本文件
创建一个名为 my_script.py 的文件。

步骤 2: 编写代码
将以下代码复制到 my_script.py 中,代码中包含了详细的注释来解释每一步的作用。
# my_script.py
import argparse
# 1. 创建一个解析器对象
# description 参数会在帮助信息的开头显示
parser = argparse.ArgumentParser(description='一个简单的命令行计算器。')
# 2. 添加参数
# parser.add_argument() 用于定义程序可以接受的命令行参数
# 添加 'num1' 参数,这是一个位置参数(Positional Argument)
# type=int: 指定参数的类型应该是整数
# help: 为该参数提供帮助文本
parser.add_argument('num1', type=int, help='第一个数字')
# 添加 'num2' 参数,也是一个位置参数
parser.add_argument('num2', type=int, help='第二个数字')
# 添加 '--operator' 参数,这是一个可选参数(Optional Argument)
# 它前面需要有 '--' 或 '-'
# choices=['add', 'sub', 'mul', 'div']: 限制该参数的值只能是这四个之一
# default='add': 如果用户没有提供该参数,则默认使用 'add'
# help: 为该参数提供帮助文本
parser.add_argument('--operator', choices=['add', 'sub', 'mul', 'div'],
default='add', help='指定要执行的操作 (默认: add)')
# 3. 解析参数
# parse_args() 会从 sys.argv 中解析参数,并返回一个包含参数值的命名空间对象
args = parser.parse_args()
# 4. 使用解析后的参数
num1 = args.num1
num2 = args.num2
operator = args.operator
result = 0
if operator == 'add':
result = num1 + num2
elif operator == 'sub':
result = num1 - num2
elif operator == 'mul':
result = num1 * num2
elif operator == 'div':
if num2 == 0:
print("错误:除数不能为零!")
exit(1)
result = num1 / num2
# 5. 打印结果
print(f"计算结果: {num1} {operator} {num2} = {result}")
步骤 3: 运行和测试脚本
打开你的终端或命令行,进入 my_script.py 所在的目录,然后尝试以下命令:
a) 查看帮助信息
python my_script.py -h
或者
python my_script.py --help
你会看到类似下面的输出,这是 argparse 自动为你生成的:
usage: my_script.py [-h] [--operator {add,sub,mul,div}] num1 num2
一个简单的命令行计算器。
positional arguments:
num1 第一个数字
num2 第二个数字
options:
-h, --help show this help message and exit
--operator {add,sub,mul,div}
指定要执行的操作 (默认: add)
b) 执行加法操作 (使用默认操作符)
python my_script.py 10 5
输出:
计算结果: 10 add 5 = 15
c) 执行减法操作 (指定操作符)
python my_script.py 10 5 --operator sub
输出:
计算结果: 10 sub 5 = 5
d) 执行除法操作 (使用短选项 -o)
argparse 会自动为长选项 --operator 生成一个短选项 -o。
python my_script.py 20 4 -o div
输出:
计算结果: 20 div 4 = 5.0
e) 提供无效的参数
python my_script.py 10 5 --operator pow
argparse 会自动报错并显示帮助信息:
usage: my_script.py [-h] [--operator {add,sub,mul,div}] num1 num2
my_script.py: error: argument --operator: invalid choice: 'pow' (choose from 'add', 'sub', 'mul', 'div')
argparse 核心概念总结
| 概念 | 描述 | 示例 |
|---|---|---|
| ArgumentParser | 主对象,用于解析命令行参数和生成帮助信息。 | parser = argparse.ArgumentParser(...) |
| 位置参数 | 必须提供的参数,没有 或 前缀,顺序很重要。 | parser.add_argument('filename') |
| 可选参数 | 可选的参数,通常有 (短) 或 (长) 前缀。 | parser.add_argument('-v', '--verbose') |
| 动作 | 定义当参数被解析时应该如何处理。store (默认, 存储值), store_true (存储 True), store_false (存储 False), append (将值添加到列表), count (计算出现次数) 等。 |
parser.add_argument('-v', '--verbose', action='store_true') |
| 类型 | 指定参数应该被转换成的类型。int, float, str 等。 |
parser.add_argument('width', type=int) |
| 默认值 | 如果参数未提供,则使用的值。 | parser.add_argument('--port', default=8080) |
| 帮助信息 | -h 或 --help 显示的文本。 |
parser.add_argument('...', help='这是一个参数') |
| 互斥组 | 确保组内的选项中只有一个能被使用。 | group = parser.add_mutually_exclusive_group() |
| 必选组 | 确保组内的选项中至少有一个被使用。 | group = parser.add_argument_group(required=True) |
进阶示例:互斥组和可选标志
让我们在上一个例子的基础上增加 --verbose 和 --quiet 两个互斥的标志。
# my_script_advanced.py
import argparse
parser = argparse.ArgumentParser(description='一个简单的命令行计算器。')
# 位置参数
parser.add_argument('num1', type=int, help='第一个数字')
parser.add_argument('num2', type=int, help='第二个数字')
# 可选参数
parser.add_argument('--operator', choices=['add', 'sub', 'mul', 'div'],
default='add', help='指定要执行的操作 (默认: add)')
# --- 新增部分:互斥组 ---
# 创建一个互斥组
verbose_group = parser.add_mutually_exclusive_group()
# 添加 --verbose 标志,action='store_true' 表示如果提供该参数,则将 args.verbose 设为 True
verbose_group.add_argument('-v', '--verbose', action='store_true', help='启用详细输出')
# 添加 --quiet 标志,action='store_true' 表示如果提供该参数,则将 args.quiet 设为 True
verbose_group.add_argument('-q', '--quiet', action='store_true', help='禁用输出')
args = parser.parse_args()
# 计算逻辑...
num1 = args.num1
num2 = args.num2
operator = args.operator
result = 0
# ... (计算逻辑与之前相同) ...
# --- 使用互斥标志 ---
if args.verbose:
print(f"正在计算 {num1} {operator} {num2}...")
print(f"计算结果: {result}")
elif args.quiet:
# 如果设置了 --quiet,只打印结果,不打印其他信息
print(result)
else:
# 默认情况
print(f"计算结果: {num1} {operator} {num2} = {result}")
测试互斥组:
# 正常模式
python my_script_advanced.py 10 5
# 输出: 计算结果: 10 add 5 = 15
# 详细模式
python my_script_advanced.py 10 5 --verbose
# 输出:
# 正在计算 10 add 5...
# 计算结果: 15
# 安静模式
python my_script_advanced.py 10 5 -q
# 输出: 15
# 尝试同时使用互斥选项 (会报错)
python my_script_advanced.py 10 5 -v -q
# 输出:
# usage: my_script_advanced.py [-h] [--operator {add,sub,mul,div}] num1 num2
# [-v | -q]
# my_script_advanced.py: error: argument -q: not allowed with argument -v
- 安装:
argparse是 Python 标准库,无需安装。 - 核心步骤:创建
ArgumentParser-> 添加参数 (add_argument) -> 解析参数 (parse_args) -> 使用结果。 - 关键特性:它能自动生成帮助信息、处理参数类型、提供默认值、管理互斥选项等,极大地简化了命令行工具的开发。
