跳到主要内容 Python argparse 命令行参数解析实战 | 极客日志
Python
Python argparse 命令行参数解析实战 介绍 Python argparse 模块的使用方法。涵盖基础工作流程、核心参数配置(类型、默认值、必填、枚举、动作等)、位置参数与可选参数区别、开关参数及变量重命名。包含 PyCharm 配置技巧及常见避坑指南,通过多个实战案例展示如何构建规范的命令行工具。
JavaCoder 发布于 2026/3/29 更新于 2026/4/17 4 浏览在 Python 开发中,命令行参数解析是自动化脚本、批量处理程序的核心能力。argparse作为 Python 内置的标准模块,能替代繁琐的 sys.argv 手动解析,提供标准化、易维护的参数处理方案。
一、为什么选择 argparse? 特性 说明 开箱即用的帮助体系 运行 -h/--help 自动生成参数说明,无需手写文档 强类型校验 自动校验字符串、整数、枚举值等,传错参数直接抛出友好错误 灵活的参数配置 支持位置参数、可选参数、必填参数、默认值、参数缩写等 工程化规范 符合 Python PEP 编码规范,代码可读性与可维护性远超手动解析
二、argparse 基础工作流程 使用 argparse 只需四步,是所有案例的通用框架:
import argparse
parser = argparse.ArgumentParser(description="程序功能描述" )
parser.add_argument("param_name" , config_item1, config_item2, ...)
args = parser.parse_args()
print (args.param_name)
三、核心参数配置详解 参数 作用 示例 name or flags参数名(可选参数需加 --) '--name', '-n'type参数类型(int, str, float 等) type=inthelp参数说明(-h 时显示) help='请输入年龄'default默认值(不传参时使用) default='medium'required是否为必填 required=Truechoices限定可选值列表 choices=['张三','李四']action特殊动作(如开关参数) action='store_true'dest指定代码中使用的变量名 dest='img_path'
四、核心案例实战(全覆盖知识点)
案例 1:基础参数定义(类型限制 + 帮助信息) 目标 :定义 --name(字符串)、--age(整数)参数,输出个性化问候。
import argparse
parser = argparse.ArgumentParser(description="基础案例:接收姓名和年龄并输出问候语" )
parser.add_argument('--name' , type =str , help ='请输入你的姓名(字符串类型)' )
parser.add_argument('--age' , type =int , help ='请输入你的年龄(整数类型)' )
args = parser.parse_args()
if args.name and args.age:
print (f"Hello {args.name} , you are {args.age} years old!" )
type 参数强制限定输入类型,若传入 --age twenty 会报类型错误。
description 给命令行工具添加整体的说明文字
help 字符串会在 -h 时自动显示,帮助用户理解参数含义。
不传参数时,对应属性值为 None,代码中需要做存在性检查(如 if args.name)。
案例 2:参数缩写 + 可选值限制(choices) 目标 :定义 -gf/--girlfriend 参数,仅允许传入指定枚举值(Lily / Eva)。
import argparse
parser = argparse.ArgumentParser(description="参数缩写 + 可选值限制案例" )
parser.add_argument('-gf' , '--girlfriend' , choices=['Lily' , 'Eva' ], help ='选择女朋友(仅支持:Lily/Eva)' )
args = parser.parse_args()
print (f'选中的女朋友:{args.girlfriend} ' )
参数全称为 --girlfriend,缩写为 -gf,命令行中两者等效。
解析后,在代码中调用该参数,只能使用完整的参数名称 args.girlfriend,不能使用 args.gf (dest 默认取自第一个长选项名或第一个选项去除短横)。
choices 限制可选值,传入列表外的值会立即报错,无需手动校验。
不传参时值为 None,可根据需要设置 default。
案例 3:位置参数(无 -- 前缀的必填参数) 目标 :定义 food、color 两个位置参数(必填),--size/-s 可选参数(带默认值)。
import argparse
parser = argparse.ArgumentParser(description="位置参数 + 默认值案例" )
parser.add_argument('food' , help ='喜欢的食物(位置参数 1,必填)' )
parser.add_argument('color' , help ='喜欢的颜色(位置参数 2,必填)' )
parser.add_argument('--size' , '-s' , default='medium' , help ='尺寸(默认:medium,可选:small/large)' )
args = parser.parse_args()
print (f"食物:{args.food} ,颜色:{args.color} ,尺寸:{args.size} " )
位置参数没有 - 或 -- 前缀,必须按顺序传入,且为必填(除非设置 nargs='?' 等特殊用法)。
可选参数 --size 带有默认值,不传参时自动使用 default。
输入该参数不需要指定参数名称,解释器会按顺序自动赋值,指定名称的话,反而会报错。
案例 4:必填参数(required=True) 目标 :定义 -f/--food 参数为必填项,强制用户传入食物名称。
import argparse
parser = argparse.ArgumentParser(description="必填参数案例" )
parser.add_argument('-f' , '--food' , type =str , required=True , help ='【必填】你喜欢的食物' )
args = parser.parse_args()
print (f"你选择的食物:{args.food} " )
required=True 仅适用于可选参数(带 -/-- 的参数),将其变为'必须通过名称指定'的必填项。
不传必填参数时,程序自动报错并退出,无需手动判断。
注意与位置参数的区别:位置参数本身就是必填的,无需加 required。
案例 5:设置默认值 + 限制数据类型 目标 :定义 --house 参数,限制为整数类型,并设置默认值为 0
import argparse
parser = argparse.ArgumentParser(description="默认值 + 类型限制案例" )
parser.add_argument('--house' , type =int , default=0 , help ='房屋数量(整数,默认 0)' )
args = parser.parse_args()
print (f"房屋数量:{args.house} " )
type 用于指定默认类型。
type=int 自动将输入字符串转为整数,转换失败时报错。
default 用于指定默认值,如果在命令行中不指定参数值,则会使用该参数默认值
default=0 使参数成为可选参数,不传参时值为 0。
设置了 default 的参数,不会因为不传参而报错,这与 required=True 形成对比。
案例 6:开关参数(action='store_true') 目标 :定义 --debug 开关参数,无需传值,仅通过'是否传入'控制逻辑。
import argparse
parser = argparse.ArgumentParser(description="开关参数案例:调试模式控制" )
parser.add_argument('--debug' , action='store_true' , help ='开启调试模式(不传则关闭)' )
args = parser.parse_args()
if args.debug:
print ("✅ 调试模式已开启,输出详细日志..." )
else :
print ("🔴 正常运行模式,仅输出核心信息..." )
action='store_true':若在命令行中未指定该参数,默认状态下其值为 False;若指定该参数,该参数将置为 True
action='store_false':若在命令行中未指定该参数,默认状态下其值为 True;若指定该参数,该参数将置为 False
案例 7:重定义参数变量名(dest) 目标 :参数名用 --img-path,代码中通过 args.img 调用(简化变量名)。
import argparse
parser = argparse.ArgumentParser(description="重定义参数变量名案例" )
parser.add_argument('--no_warmup' , dest='warmup' , action='store_false' )
args = parser.parse_args()
print (args.warmup)
dest 用于给参数重起一个变量名
在命令行中通过 --no_warmup 传参
在代码中获取参数值时,使用 args.warmup,使用 args.no_warmup 会报错
五、PyCharm 中传递 argparse 参数 新手常遇到'PyCharm 直接运行报参数缺失'的问题,只需 3 步配置:
点击 PyCharm 右上角「Edit Configurations」(运行配置);
在「Parameters」输入框中填写参数(如 --name 张三 --age 25);
点击「Run」运行,参数自动传入,无需终端操作。
六、常见避坑指南
参数顺序问题 :位置参数(无 --)必须写在可选参数(--xxx)前面;
类型不匹配 :如 --age 传入字符串('二十')会直接报错,需确保类型一致;
重复定义参数 :同一参数名(如 -t/--template)不能多次 add_argument,否则报冲突;
路径含特殊字符 :传入带空格 / 中文的路径时,需用引号包裹(如 --path "D:/我的文件/test.png");
默认值生效规则 :可选参数不传值时,自动使用 default 配置的值;
代码中访问参数 :始终使用 dest 指定的名称(默认是长选项名去掉 --),而不是缩写。
七、完整综合案例(多参数组合) import argparse
parser = argparse.ArgumentParser(
description="综合案例:argparse 全功能演示" ,
epilog="示例用法:python demo_all.py 苹果 红色 -gf Lily --age 28 --debug -s large"
)
parser.add_argument('food' , help ='喜欢的食物(必填)' )
parser.add_argument('color' , help ='喜欢的颜色(必填)' )
parser.add_argument('-gf' , '--girlfriend' , choices=['Lily' , 'Eva' ], help ='女朋友(可选:Lily/Eva)' )
parser.add_argument('--age' , type =int , help ='年龄(整数)' )
parser.add_argument('--size' , '-s' , default='medium' , help ='尺寸(默认 medium)' )
parser.add_argument('--debug' , action='store_true' , help ='开启调试模式' )
parser.add_argument('--house' , type =int , default=0 , help ='房屋数量(默认 0)' )
args = parser.parse_args()
print ("===== 传入参数汇总 =====" )
print (f"食物:{args.food} " )
print (f"颜色:{args.color} " )
print (f"女朋友:{args.girlfriend if args.girlfriend else '未指定' } " )
print (f"年龄:{args.age if args.age else '未指定' } " )
print (f"尺寸:{args.size} " )
print (f"调试模式:{'开启' if args.debug else '关闭' } " )
print (f"房屋数量:{args.house} " )
八、总结 argparse 是 Python 处理命令行参数的标准方案,核心知识点可总结为:
参数分类 :位置参数(无 --,必填)、可选参数(--xxx,可选);
核心配置 :type(类型)、help(说明)、required(必填)、choices(可选值)、default(默认值)、action='store_true'(开关)、dest(重命名);
使用逻辑 :创建解析器 → 添加参数 → 解析参数 → 调用参数;
调试技巧 :通过 -h 查看帮助,PyCharm 配置参数避免终端操作;
注意事项 :代码中访问参数必须用完整名称(dest),缩写仅用于命令行。
掌握 argparse 能让你的 Python 程序脱离'硬编码',适配不同场景的参数输入,是自动化脚本、深度学习训练脚本开发的必备技能。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online