欢迎光临
我们一直在努力

Python内置模块之sys与核心工具sys.argv

在 Python 脚本开发中,命令行交互是实现灵活、自动化任务的关键。而 sys 模块中的 argv 属性,正是我们获取外部传入参数的核心工具。本文将深入讲解 sys.argv 的原理、用法、实战案例及常见误区。


一、什么是 sys 模块?

sys(system)是 Python 内置模块,提供与 Python 解释器和操作系统交互的功能,例如:

  • 获取命令行参数(sys.argv)
  • 退出程序(sys.exit())
  • 查看 Python 版本(sys.version)
  • 修改模块搜索路径(sys.path)

无需安装:sys 是标准库,直接 import sys 即可使用。


二、核心:sys.argv 详解

1. 基本概念

  • sys.argv 是一个列表(list),存储了运行脚本时传入的所有命令行参数
  • 第一个元素 argv[0] 永远是脚本文件名本身
  • 后续元素 argv[1], argv[2], … 是用户传入的参数

2. 语法格式

import sys

print("参数个数:", len(sys.argv))
print("所有参数:", sys.argv)

运行结果:


三、实战演示

示例 1:基础用法

创建文件 hello.py:

# hello.py
import sys

if len(sys.argv) < 2:
print("用法: python hello.py <姓名>")
sys.exit(1) # 非0表示异常退出

name = sys.argv[1]
print(f"你好, {name}!")

sys.exit(1) 主动终止程序并返回错误码

终端运行:

  • 首先复制创建的hello.py文件的绝对路径:
  • 其次在pycharm的终端(terminal)输入命令符  python 绝对路径 参数,按下回车键运行:

    ⚠️注意:当传入参数大于程序所需参数时,程序按顺序接收所需参数。

    命令提示符运行:

    首先打开命令提示符窗口,然后进入hello.py文件所在磁盘,然后按格式输入命令符python 绝对路径 参数,最后按下回车键即可运行文件。


    示例 2:多参数处理(计算器)

    创建 calc.py:

    # calc.py
    import sys

    if len(sys.argv) != 4:
    print("用法: python calc.py <数字1> <操作符> <数字2>")
    print("示例: python calc.py 3 + 5")
    sys.exit(1)

    num1 = float(sys.argv[1])
    op = sys.argv[2]
    num2 = float(sys.argv[3])

    if op == '+':
    result = num1 + num2
    elif op == '-':
    result = num1 – num2
    elif op == '*':
    result = num1 * num2
    elif op == '/':
    result = num1 / num2 if num2 != 0 else "错误:除数不能为0"
    else:
    print("仅支持 +, -, *, /")
    sys.exit(1)

    print(f"{num1} {op} {num2} = {result}")

    运行效果:


    示例 3:文件批量处理(实用场景)

    # process_files.py
    import sys
    import os

    if len(sys.argv) < 2:
    print("用法: python process_files.py <文件1> [文件2] …")
    sys.exit(1)

    for filepath in sys.argv[1:]:
    if os.path.exists(filepath):
    size = os.path.getsize(filepath)
    print(f"✅ {filepath}: {size} 字节")
    else:
    print(f"❌ 文件不存在: {filepath}")

    运行:

    $ python process_files.py report.pdf data.csv config.txt
    ✅ report.pdf: 245760 字节
    ✅ data.csv: 10240 字节
    ❌ 文件不存在: config.txt


    四、常见误区与注意事项

    误区 1:忘记 argv[0] 是脚本名

    # 错误写法
    name = sys.argv[0] # 实际得到的是 "hello.py",不是用户输入!

    正确索引:用户参数从 sys.argv[1] 开始


    误区 2:未校验参数数量

    # 危险代码!
    name = sys.argv[1] # 若未传参,会报 IndexError

    安全做法:

    if len(sys.argv) < 2:
    print("缺少必要参数!")
    sys.exit(1)


    误区 3:参数类型未转换

    sys.argv 中所有元素都是 字符串类型!

    # 错误:直接相加会拼接字符串
    a = sys.argv[1] # "3"
    b = sys.argv[2] # "5"
    print(a + b) # 输出 "35" 而非 8

    # 正确:转换为数字
    a = int(sys.argv[1])
    b = int(sys.argv[2])
    print(a + b) # 输出 8


    五、sys.argv vs argparse(进阶替代方案)

    当参数复杂时(如带选项 -v, –output),推荐使用 argparse:

    功能sys.argvargparse
    简单位置参数 ✅ 足够 ✅ 支持
    选项参数(如 -h) ❌ 需手动解析 ✅ 原生支持
    自动生成帮助文档 ❌ 需手写 ✅ 自动 –help
    类型自动转换 ❌ 需手动 ✅ 内置

    argparse 示例:

    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument("name", help="你的名字")
    parser.add_argument("-a", "–age", type=int, default=18)
    args = parser.parse_args()

    print(f"你好 {args.name}, 年龄 {args.age}")

    运行:

    💡 建议:

    • 简单脚本 → 用 sys.argv
    • 复杂工具 → 用 argparse

    六、sys.argv 典型应用场景

    场景说明
    自动化脚本 批量处理不同文件/目录
    数据管道 接收上游任务的输出路径
    配置切换 通过参数指定环境(dev/test/prod)
    CI/CD 集成 在 Jenkins/GitHub Actions 中传参

    七、总结

    关键点说明
    sys.argv[0] 永远是脚本文件名
    用户参数 从 sys.argv[1] 开始
    类型 所有参数均为字符串,需手动转换
    安全校验 必须检查 len(sys.argv)
    退出控制 用 sys.exit(0) 成功退出,sys.exit(1) 异常退出

     口诀:
    “argv[0] 是自己,参数从1起;数量先校验,类型要转齐!”

    赞(0)
    未经允许不得转载:171主机测评 » Python内置模块之sys与核心工具sys.argv
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址