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)深入学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值