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