Python argparse传递外部参数详细教程
作者:唤笙(SYL)
什么是 argparse?
argparse 是 Python 标准库中用于解析命令行参数的模块。它能让您的 Python 脚本像专业命令行工具一样接收和处理用户输入的参数,比如:
python train.py --epochs 100 --batch-size 32 --verbose
主要功能
- ✅ 自动生成帮助信息(
-h和--help) - ✅ 自动验证参数类型和值
- ✅ 支持必选/可选参数
- ✅ 提供友好的错误提示
应用场景
- 数据处理脚本:指定输入输出文件、处理参数
- 机器学习训练:传递超参数、模型配置
- 自动化工具:控制脚本行为、运行模式
核心概念
在开始示例之前,先了解几个重要概念:
1. 参数类型
- 位置参数:必须提供,按顺序传递(如
python script.py file.txt) - 可选参数:以
-或--开头,可以不提供(如--output result.txt)
2. 常用参数选项
| 参数 | 说明 | 示例 |
|---|---|---|
type | 指定参数类型 | type=int 只接受整数 |
default | 默认值 | default=10 不提供时使用 10 |
help | 帮助信息 | help='输入文件路径' |
action='store_true' | 布尔标志,出现即为 True | 用于 --verbose、--debug 等开关 |
choices | 限定可选值 | choices=['A', 'B', 'C'] |
nargs | 接受多个值 | nargs='+' 至少一个值 |
3. 短选项 vs 长选项
- 短选项:单个字母,用
-开头,如-v - 长选项:完整单词,用
--开头,如--verbose - 通常成对出现,提供简写和可读性
入门示例
示例 1:最简单的开始
目标:创建一个程序,接收一个名字并打印问候语。
新手提示:这是最基础的例子,只用一个位置参数。位置参数是必需的,用户必须提供。
import argparse
# 第 1 步:创建解析器
parser = argparse.ArgumentParser(description='简单的问候程序')
# 第 2 步:添加参数
parser.add_argument('name', help='你的名字')
# 第 3 步:解析参数
args = parser.parse_args()
# 第 4 步:使用参数
print(f"你好, {args.name}!")
运行效果:
python script.py 张三 # 输出:你好, 张三! python script.py # 错误:the following arguments are required: name python script.py -h # 显示帮助信息
关键要点:
- 使用三步走:创建解析器 → 添加参数 → 解析参数
- 参数通过
args.参数名访问 - 自动生成
-h帮助
示例 2:添加可选参数
目标:在上个例子基础上,让用户可以自定义问候语。
提示:这次引入可选参数。可选参数以 -- 开头,不提供时会使用默认值。我们用 default 参数来设置默认值。
import argparse
parser = argparse.ArgumentParser(description='可自定义的问候程序')
# 位置参数(必需)
parser.add_argument('name', help='你的名字')
# 可选参数(有默认值)
parser.add_argument('--greeting',
default='你好',
help='问候语(默认:你好)')
args = parser.parse_args()
print(f"{args.greeting}, {args.name}!")
运行效果:
python script.py 张三 # 输出:你好, 张三! python script.py 张三 --greeting 早上好 # 输出:早上好, 张三!
关键要点:
- 可选参数用
--开头 default设置默认值- 可以不提供,不影响程序运行
示例 3:类型验证
目标:编写一个计算器,计算两个数的和。
新手提示:现在引入 type 参数。argparse 默认把所有输入当作字符串,使用 type=int 可以自动转换为整数,并验证输入是否合法。
import argparse
parser = argparse.ArgumentParser(description='简单计算器')
# 指定参数类型为整数
parser.add_argument('num1', type=int, help='第一个数字')
parser.add_argument('num2', type=int, help='第二个数字')
args = parser.parse_args()
result = args.num1 + args.num2
print(f"{args.num1} + {args.num2} = {result}")
运行效果:
python script.py 10 20 # 输出:10 + 20 = 30 python script.py 10 abc # 错误:argument num2: invalid int value: 'abc'
关键要点:
type=int自动转换并验证- 常用类型:
int、float、str - 输入不符合类型时自动报错
示例 4:布尔开关
目标:添加一个 --verbose 开关,控制是否显示详细信息。
新手提示:这里介绍布尔标志。使用 action='store_true' 后,该参数不需要值,只要在命令行中出现,就会被设置为 True;不出现就是 False。这常用于 --verbose(详细模式)、--debug(调试模式)等开关。
import argparse
parser = argparse.ArgumentParser(description='带详细模式的计算器')
parser.add_argument('num1', type=int, help='第一个数字')
parser.add_argument('num2', type=int, help='第二个数字')
# 布尔开关:出现即为 True
parser.add_argument('--verbose',
action='store_true',
help='显示详细计算过程')
args = parser.parse_args()
result = args.num1 + args.num2
if args.verbose:
print(f"详细信息:{args.num1} + {args.num2} = {result}")
else:
print(result)
运行效果:
python script.py 10 20 # 输出:30 python script.py 10 20 --verbose # 输出:详细信息:10 + 20 = 30
关键要点:
action='store_true'创建布尔开关- 不需要传值,出现即为
True - 适合控制程序行为的开关
示例 5:短选项和长选项
目标:为参数同时提供简写(短选项)和完整名称(长选项)。
新手提示:专业的命令行工具通常同时提供短选项(如 -v)和长选项(如 --verbose)。短选项方便快速输入,长选项增强可读性。只需在 add_argument() 中同时指定两个即可。
import argparse
parser = argparse.ArgumentParser(description='文件计数器')
# 同时提供短选项和长选项
parser.add_argument('file', help='输入文件路径')
parser.add_argument('-c', '--count',
type=int,
default=10,
help='显示前 N 行(默认:10)')
parser.add_argument('-v', '--verbose',
action='store_true',
help='显示详细信息')
args = parser.parse_args()
print(f"将读取文件: {args.file}")
print(f"显示行数: {args.count}")
if args.verbose:
print("详细模式已启用")
运行效果:
python script.py data.txt -c 5 -v # 等同于:python script.py data.txt --count 5 --verbose # 输出: # 将读取文件: data.txt # 显示行数: 5 # 详细模式已启用
关键要点:
- 短选项和长选项可以同时使用
- 两种形式完全等价
- 约定:短选项用单字母,长选项用完整单词
示例 6:限定可选值
目标:创建一个日志程序,让用户选择日志级别。
新手提示:当参数只能从几个固定值中选择时,使用 choices 参数。这样 argparse 会自动验证输入,并在帮助信息中显示所有可选项。
import argparse
parser = argparse.ArgumentParser(description='日志记录器')
parser.add_argument('message', help='日志消息')
parser.add_argument('-l', '--level',
choices=['debug', 'info', 'warning', 'error'],
default='info',
help='日志级别')
args = parser.parse_args()
print(f"[{args.level.upper()}] {args.message}")
运行效果:
python script.py "服务器启动成功" --level info # 输出:[INFO] 服务器启动成功 python script.py "出错了" --level critical # 错误:argument -l/--level: invalid choice: 'critical' # (choose from 'debug', 'info', 'warning', 'error')
关键要点:
choices限定参数只能从列表中选择- 自动验证和生成错误提示
- 帮助信息会显示所有可选值
示例 7:实战应用
目标:创建一个简单的文本处理工具,综合运用前面的知识。
新手提示:这是一个综合示例,整合了位置参数、可选参数、类型验证、布尔开关等。实际项目中的 argparse 使用就是这样的结构。
import argparse
parser = argparse.ArgumentParser(
description='文本处理工具',
epilog='示例: python script.py input.txt --output result.txt --uppercase'
)
# 输入文件(必需)
parser.add_argument('input', help='输入文件路径')
# 输出文件(可选,有默认值)
parser.add_argument('-o', '--output',
default='output.txt',
help='输出文件路径(默认:output.txt)')
# 处理选项
parser.add_argument('--uppercase',
action='store_true',
help='转换为大写')
parser.add_argument('--limit',
type=int,
help='只处理前 N 行')
parser.add_argument('-v', '--verbose',
action='store_true',
help='显示处理进度')
args = parser.parse_args()
# 实际使用
if args.verbose:
print(f"读取文件: {args.input}")
print(f"输出到: {args.output}")
if args.uppercase:
print("将转换为大写")
if args.limit:
print(f"只处理前 {args.limit} 行")
# 这里添加实际的文件处理逻辑
print("处理完成!")
运行效果:
python script.py data.txt -o result.txt --uppercase --limit 100 -v # 输出: # 读取文件: data.txt # 输出到: result.txt # 将转换为大写 # 只处理前 100 行 # 处理完成!
关键要点:
- 实际应用中会组合多种参数类型
epilog可以在帮助信息末尾添加使用示例- 结构清晰:先必需参数,再可选参数,最后开关
其他选择
sys.argv - 最简单
当脚本只需要1-2个简单参数时:
import sys filename = sys.argv[1] # 直接获取第一个参数
适用场景:快速脚本,参数极少
总结:argparse 是编写专业命令行工具的标准方案。掌握本文的 7 个示例,就能处理 绝对多数日常需求。
总结
到此这篇关于Python argparse传递外部参数的文章就介绍到这了,更多相关Python argparse传递外部参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
