Python sys库全面解析与介绍

Python 的 sys 模块是一个与 ​Python 解释器交互的核心标准库,提供了对解释器参数、运行环境、系统资源的访问和控制。以下是 sys 模块的核心内容及常用函数详解:

一、sys 模块的核心功能

类别 功能描述
命令行参数 获取脚本启动时的命令行参数(sys.argv)。
程序退出 控制脚本退出状态(sys.exit())。
模块与路径管理 管理模块导入路径(sys.path)和已加载模块(sys.modules)。
系统信息 获取 Python 版本、操作系统平台等信息(sys.versionsys.platform)。
输入/输出流 重定向标准输入/输出/错误流(sys.stdinsys.stdoutsys.stderr)。
内存与性能 查看对象内存占用(sys.getsizeof())和递归深度(sys.getrecursionlimit())。

 

二、常用函数与变量详解

1. 命令行参数处理
  • ​**sys.argv**​
  • 功能:获取命令行参数列表(列表类型,索引 0 为脚本名称)。
  • 示例

    python

    # 脚本内容(test.py)
    import sys
    print("脚本名称:", sys.argv[0])
    print("参数列表:", sys.argv[1:])

    bash

    # 命令行运行
    $ python test.py arg1 arg2
    # 输出:
    # 脚本名称: test.py
    # 参数列表: ['arg1', 'arg2']
  •  ​2. 程序退出控制

  • ​**sys.exit([status])**​
  • 功能:退出当前程序,可返回状态码(默认 0 表示正常退出,非 0 表示异常)。
  • 示例

    python

    import sys
    
    if len(sys.argv) < 2:
        print("缺少参数!")
        sys.exit(1)  # 状态码 1 表示错误退出
  • 3. 模块与路径管理

  • ​**sys.path**​

  • 功能:Python 模块搜索路径列表(可动态修改)。
  • 示例:添加自定义模块路径:

    python

    import sys
    sys.path.append("/my/custom/module/path")  # 添加路径
  • ​**sys.modules**​

  • 功能:字典类型,存储当前已导入的所有模块。
  • 示例:检查模块是否已导入:

    python

    import sys
    if "numpy" in sys.modules:
        print("numpy 已导入")
  •  ​4. 系统信息获取

  • ​**sys.version**​

  • 功能:返回 Python 解释器版本信息(字符串)。
  • 示例

    python

    import sys
    print(sys.version)  # 输出:3.9.7 (default, Aug 31 2021, ...)
  • ​**sys.platform**​

  • 功能:返回操作系统平台标识符(如 win32linuxdarwin 对应 macOS)。
  • 示例:跨平台代码适配:

    python

    import sys
    if sys.platform.startswith("win"):
        print("当前系统是 Windows")
  •  ​5. 输入/输出流重定向

  • ​**sys.stdin / sys.stdout / sys.stderr**​
  • 功能:文件对象,分别对应标准输入、输出和错误流。
  • 示例:重定向输出到文件:

    python

    import sys
    with open("output.log", "w") as f:
        sys.stdout = f  # 重定向标准输出到文件
        print("这条信息会写入 output.log")
    sys.stdout = sys.__stdout__  # 恢复默认输出
  •  6. 内存与递归管理

  • ​**sys.getsizeof(object)**​

  • 功能:返回对象占用的内存大小(字节)。
  • 示例

    python

    import sys
    data = [i for i in range(1000)]
    print(sys.getsizeof(data))  # 输出列表占用的内存(如 9016 字节)
  • ​**sys.getrecursionlimit() / sys.setrecursionlimit(n)**​

  • 功能:获取/设置 Python 递归调用最大深度(默认 1000)。
  • 示例

    python

    import sys
    print(sys.getrecursionlimit())  # 输出:1000
    sys.setrecursionlimit(2000)      # 修改递归深度限制(需谨慎)
  •  ​7. 异常处理

  • ​**sys.exc_info()**​
  • 功能:返回当前异常信息的元组(类型、值、追踪对象),需在 except 块内调用。
  • 示例

    python

    import sys
    try:
        1 / 0
    except:
        exc_type, exc_value, traceback = sys.exc_info()
        print("异常类型:", exc_type)      # <class 'ZeroDivisionError'>
        print("异常信息:", exc_value)     # division by zero
  • 三、其他实用函数

    函数/变量 功能
    sys.getdefaultencoding() 返回默认字符串编码(如 utf-8)。
    sys.byteorder 返回系统字节顺序(big 或 little)。
    sys.api_version 返回 C API 版本号(用于扩展开发)。

    四、示例代码合集

    1. 读取命令行参数并处理
    import sys
    
    if len(sys.argv) != 3:
        print(f"用法:{sys.argv[0]} <输入文件> <输出文件>")
        sys.exit(1)
    
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    print(f"处理文件:{input_file} -> {output_file}")

     2. 动态添加模块搜索路径

    import sys
    sys.path.insert(0, "/my/custom/path")  # 优先搜索自定义路径
    import my_module  # 导入自定义模块

     3. 捕获并打印异常信息

    import sys
    try:
        with open("nonexistent.txt") as f:
            content = f.read()
    except FileNotFoundError:
        exc_type, exc_value, _ = sys.exc_info()
        print(f"错误类型:{exc_type.__name__}, 错误信息:{exc_value}")

     

    五、注意事项

  • 谨慎修改递归深度:过高的递归深度可能导致栈溢出崩溃。
  • 避免滥用 sys.exit():在大型项目中应优先抛出异常而非直接退出。
  • 跨平台兼容性:使用 sys.platform 检查操作系统时需注意不同平台的标识符(如 macOS 为 darwin)。
  • sys 模块是 Python 系统级编程的基石,合理使用可提升脚本的灵活性和健壮性。建议结合官方文档(Python sys Module)深入学习。

    作者:wanglaqqqq

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python sys库全面解析与介绍

    发表回复