Python sys库全面解析与介绍
Python 的 sys 模块是一个与 Python 解释器交互的核心标准库,提供了对解释器参数、运行环境、系统资源的访问和控制。以下是 sys 模块的核心内容及常用函数详解:
一、sys 模块的核心功能
| 类别 | 功能描述 |
|---|---|
| 命令行参数 | 获取脚本启动时的命令行参数(sys.argv)。 |
| 程序退出 | 控制脚本退出状态(sys.exit())。 |
| 模块与路径管理 | 管理模块导入路径(sys.path)和已加载模块(sys.modules)。 |
| 系统信息 | 获取 Python 版本、操作系统平台等信息(sys.version, sys.platform)。 |
| 输入/输出流 | 重定向标准输入/输出/错误流(sys.stdin, sys.stdout, sys.stderr)。 |
| 内存与性能 | 查看对象内存占用(sys.getsizeof())和递归深度(sys.getrecursionlimit())。 |
二、常用函数与变量详解
1. 命令行参数处理
sys.argv**
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])**
python
import sys
if len(sys.argv) < 2:
print("缺少参数!")
sys.exit(1) # 状态码 1 表示错误退出
3. 模块与路径管理
**sys.path**
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
import sys
print(sys.version) # 输出:3.9.7 (default, Aug 31 2021, ...)
**sys.platform**
win32, linux, darwin 对应 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
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