Python使用sys.argv与argparse进行命令行参数处理

 更新时间:2026年03月15日 14:40:46   作者:輕華  
在Python开发中,命令行参数处理是高频需求, 小到快速编写的测试脚本,大到生产级的命令行工具,都需要接收外部传入的参数并解析,Python提供了多种处理命令行参数的方式,其中sys.argv和argparse是最常用的两种,本文将结合实战代码,深度解析两者的特点及区别

一、引言

在 Python 开发中,命令行参数处理是高频需求 —— 小到快速编写的测试脚本,大到生产级的命令行工具,都需要接收外部传入的参数并解析。Python 提供了多种处理命令行参数的方式,其中sys.argv(sys 模块内置)和argparse(Python 标准库)是最常用的两种。本文将结合实战代码,深度解析两者的特点、区别及适用场景,帮助开发者选择最适合的参数处理方案。

二、原生轻量:sys.argv 详解

2.1 sys.argv 基础认知

sys是 Python 的内置标准库,无需额外安装,sys.argv是其中最核心的命令行参数处理属性:

  • sys.argv本质是一个列表对象,列表第一个元素是当前执行的脚本文件名,从第二个元素开始,依次是传入的命令行参数;
  • 所有参数均以字符串类型存储,如需数值运算需手动类型转换;
  • 无内置的参数解析逻辑,需开发者手动遍历、判断参数含义。

2.2 实战解析:基于 sys.argv 的命令行处理(p_work.py)

以下是实战代码片段(核心逻辑保留):

import os
import sys

# 遍历命令行参数(从索引1开始,跳过脚本名)
for i in range(1, len(sys.argv)):
    if sys.argv[i] == "-h":
        # 手动编写帮助信息
        print('''本代码帮助
        -h:用于查询帮助
        -a:用于获取python所有关键字
        -c:用于获取python安装的所有第三方库
        -x:代表安装第三方库,加入镜像地址
        -v:查询python的所有内置函数''')
    if sys.argv[i] == '-a':
        print('开始查询Python的所有关键字:')
        help("keywords")
    if sys.argv[i] == '-c':
        print('开始查询Python安装的所有第三方库: ')
        os.system('pip list')
    if sys.argv[i] == '-x':
        # 手动获取后续参数(安装的库名)
        library_name = sys.argv[i + 1]
        print(f'开始安装第三方库:{library_name}')
        os.system(f'pip install {library_name} -i https://mirrors.aliyun.com/pypi/simple/')
    if sys.argv[i] == '-v':
        print('开始查询python的所有内置函数')
        print(dir(__builtins__))

代码执行示例

执行python p_work.py -hsys.argv的取值为['p_work.py', '-h'],程序遍历到-h后手动打印帮助信息;执行python p_work.py -x requestssys.argv['p_work.py', '-x', 'requests'],程序手动取i+1位置的requests作为库名执行安装。

2.3 sys.argv 核心特点

  • ✅ 原生内置:基于 Python 内置的sys模块,无需额外依赖,开箱即用;
  • ✅ 轻量高效:仅获取参数列表,无多余逻辑,执行效率高;
  • ❌ 手动解析:需开发者遍历、判断、切片参数,代码冗余;
  • ❌ 无类型校验:所有参数均为字符串,数值运算需手动转换(如int(sys.argv[1]));
  • ❌ 无自动帮助:帮助信息需手动编写、打印,易遗漏或格式不统一;
  • ❌ 容错性差:参数顺序错误、缺失时,需手动做异常处理,否则直接报错。

三、功能强大:argparse 详解

3.1 argparse 基础认知

argparse是 Python 3.2 + 纳入标准库的命令行参数解析模块(Python 2 需手动安装),专为复杂命令行参数处理设计:

  • 支持参数定义、自动解析、类型校验、默认值设置
  • 自动生成标准化的帮助信息(无需手动编写);
  • 支持位置参数、可选参数、子命令、互斥参数等高级特性;
  • 内置异常处理,参数错误时自动提示并退出。

3.2 实战解析:基于 argparse 的命令行处理(args.py)

以下是实战代码片段:

import argparse

# 1. 创建参数解析器对象
ap = argparse.ArgumentParser()

# 2. 定义参数
# 布尔型参数:--sum,传入则执行求和函数
ap.add_argument("--sum", action="store_true", help="数字累加")
# 数值型参数:--aaa/--bbb,默认值分别为30/36
ap.add_argument("--aaa", type=int, default=30)
ap.add_argument("--bbb", type=int, default=36)

# 3. 解析命令行参数
opt = ap.parse_args()

# 4. 业务逻辑处理
if opt.sum:
    a = int(input())
    b = int(input())
    print(a + b)
else:
    print(opt.aaa + opt.bbb)

代码执行示例

执行python args.py --sum,程序触发action="store_true",进入手动输入求和逻辑;执行python args.py --aaa 10 --bbb 20,程序自动解析数值类型参数,输出30;执行python args.py -h,自动生成标准化帮助信息:

3.3 argparse 核心特点

  • ✅ 功能全面:支持类型校验、默认值、子命令、互斥参数等;
  • ✅ 自动解析:无需手动遍历,解析逻辑由模块封装,代码简洁;
  • ✅ 标准化帮助:自动生成-h/--help帮助信息,格式统一;
  • ✅ 容错性强:参数类型错误、缺失时,自动输出错误提示;
  • ❌ 稍重:需先定义参数再解析,简单场景下略有冗余;
  • ❌ 非极简:极简单的参数场景下,代码量略高于 sys.argv。

四、深度对比:sys.argv vs argparse

4.1 核心维度对比表

对比维度sys.argvargparse
原生性内置 sys 模块,无需额外依赖3.2 + 标准库,无需额外安装
参数解析难度手动遍历 / 判断 / 切片,难度高自动解析,仅需定义参数,难度低
类型校验无,需手动转换(如 int/str)支持 int/float 等类型自动校验
默认值支持需手动判断参数是否存在,再赋值内置 default 参数,一键设置
帮助信息生成需手动编写、打印帮助文本自动生成标准化 - h/--help 帮助信息
异常容错无,参数错误直接抛异常 / 逻辑错误内置异常处理,自动输出错误提示
代码量(简单场景)少(几行即可处理)多(需定义解析器、参数、解析步骤)
代码量(复杂场景)极多(需大量 if/else 处理参数)少(模块化定义参数,逻辑清晰)
适用参数数量适合 1-3 个简单参数适合任意数量,尤其多参数场景
学习成本低(仅需了解列表取值)中(需学习参数定义、action 等属性)

4.2流程图

sys.argv 解析流程(手动处理)

argparse 解析流程(自动处理)

4.3 性能对比(实测数据)

为验证两者的执行效率,我们对 “解析 1 个参数并输出结果” 的场景做 1000 次循环测试(Python 3.9.7,Windows 11):

方案1000 次执行总耗时(ms)单次平均耗时(ms)
sys.argv12.30.0123
argparse18.70.0187

结论:sys.argv 因无额外封装,执行效率略高;argparse 因封装了解析逻辑,耗时稍高,但差距在毫秒级,业务场景可忽略。

五、适用场景选择

优先用 sys.argv 的场景:

  1. 极简单的参数处理(如仅 1-2 个参数,无类型校验);
  2. 快速编写的临时脚本(追求极简代码,无需标准化);
  3. 嵌入式 / 轻量化运行环境(需最小化依赖和代码量)。

优先用 argparse 的场景:

  1. 生产级命令行工具(需标准化、可维护性);
  2. 多参数、复杂参数逻辑(如类型校验、默认值、子命令);
  3. 团队协作开发(需统一的参数解析规范和帮助信息);
  4. 需容错性和用户友好性(自动错误提示、标准化帮助)。

六、总结

sys.argv 和 argparse 并非 “谁替代谁”,而是 “按需选择”:

  • sys.argv是 Python 命令行参数处理的 “极简方案”,原生、轻量、高效,适合小脚本、临时需求;
  • argparse是 “工业级方案”,功能全面、易维护、用户友好,适合生产环境、复杂参数场景。

实际开发中,建议根据参数复杂度选择:简单场景用 sys.argv 快速实现,复杂场景用 argparse 提升代码质量和用户体验。

附:扩展建议

  1. 如需要更轻量的第三方库,可考虑click(基于 argparse 封装,语法更简洁);
  2. 如需兼容 Python 2/3,需注意 argparse 的版本兼容(Python 2 需手动pip install argparse);
  3. 生产环境中,即使使用 sys.argv,也建议增加参数校验和异常处理,提升鲁棒性。

以上就是Python使用sys.argv与argparse进行命令行参数处理的详细内容,更多关于Python命令行参数处理的资料请关注脚本之家其它相关文章!

相关文章

  • pytorch 预训练模型读取修改相关参数的填坑问题

    pytorch 预训练模型读取修改相关参数的填坑问题

    这篇文章主要介绍了pytorch 预训练模型读取修改相关参数的填坑问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Python检测一个对象是否为字符串类的方法

    Python检测一个对象是否为字符串类的方法

    这篇文章主要介绍了Python检测一个对象是否为字符串类的方法,即检测是一个对象是否是字符串对象,本文还讲解了一个有趣的判断方法,需要的朋友可以参考下
    2015-05-05
  • python3实现163邮箱SMTP发送邮件

    python3实现163邮箱SMTP发送邮件

    这篇文章主要为大家详细介绍了Python3实现163邮箱SMTP发送邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • python读取mat文件生成h5文件的实现

    python读取mat文件生成h5文件的实现

    这篇文章主要介绍了python读取mat文件生成h5文件的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • python求两个时间的时间差(实例代码)

    python求两个时间的时间差(实例代码)

    我们在用python进行分析的时候,可能会碰到计算两个日期的时间差。下面为大家介绍一下如何计算两个时间的时间差,需要的朋友可以参考下
    2022-11-11
  • 使用Python中PIL库给图片添加文本水印

    使用Python中PIL库给图片添加文本水印

    有时候我们需要添加一定的水印以给自己的图片添加先关的标记,在Python中有相关的计算函数,下面这篇文章主要给大家介绍了关于使用Python中PIL库给图片添加文本水印的相关资料,需要的朋友可以参考下
    2023-04-04
  • Python smallseg分词用法实例分析

    Python smallseg分词用法实例分析

    这篇文章主要介绍了Python smallseg分词用法,以实例形式分析了Python实现分析的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 如何在Python中进行异常处理

    如何在Python中进行异常处理

    这篇文章主要介绍了如何在Python中进行异常处理,Python中使用用异常对象(exception object)表示异常情况,当程序运行遇到错误后,就会触发发异常,下文关于异常处理的相关内容,需要的小伙伴可以参考一下
    2022-03-03
  • 详解如何通过Python批量转换图片为PDF

    详解如何通过Python批量转换图片为PDF

    这篇文章主要为大家介绍了如何基于Python + Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下
    2025-04-04
  • python中IO流和对象序列化详解

    python中IO流和对象序列化详解

    大家好,本篇文章主要讲的是python中IO流和对象序列化详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论