一、模块简介
sys 是 Python 的一个内置标准库模块,全名为 “System-specific parameters and functions”(系统特定参数与函数)。
它提供了与 Python 解释器 和 操作系统交互 的接口,使开发者能够访问解释器的运行环境、路径信息、输入输出流、异常处理、退出控制等底层功能。
二、模块导入
import sys
导入后即可直接使用其中的属性和函数,如:
print(sys.version)
print(sys.platform)
sys.exit(0)
三、常用属性与方法总览表
| 分类 | 属性/方法 | 说明 | 类型 / 返回值 | 示例 |
|---|---|---|---|---|
| 版本信息 | sys.version |
获取当前 Python 的版本号(含构建信息) | str |
'3.12.1 (tags/v3.12.1:...)' |
sys.version_info |
获取版本元组(major, minor, micro, releaselevel, serial) | tuple |
(3, 12, 1, 'final', 0) |
|
sys.hexversion |
以十六进制返回版本信息 | int |
0x30c01f0 |
|
| 解释器信息 | sys.executable |
返回 Python 解释器可执行文件路径 | str |
'/usr/bin/python3' |
sys.platform |
返回操作系统平台标识(如 'win32', 'linux', 'darwin') |
str |
'win32' |
|
sys.byteorder |
返回当前系统字节序('little'或'big') |
str |
'little' |
|
sys.getdefaultencoding() |
返回当前默认字符编码 | str |
'utf-8' |
|
sys.getfilesystemencoding() |
返回文件系统编码 | str |
'utf-8' |
|
| 路径与模块管理 | sys.path |
当前模块搜索路径列表 | list[str] |
['/usr/lib/python3.12', ...] |
sys.path.append(path) |
向模块搜索路径添加目录 | None |
sys.path.append('/opt/my_modules') |
|
sys.modules |
字典:记录已加载的模块名 → 模块对象映射 | dict |
sys.modules['sys'] |
|
| 标准输入输出 | sys.stdin |
标准输入流对象 | io.TextIOWrapper |
input_data = sys.stdin.read() |
sys.stdout |
标准输出流对象 | io.TextIOWrapper |
sys.stdout.write("Hello\n") |
|
sys.stderr |
标准错误流对象 | io.TextIOWrapper |
sys.stderr.write("Error occurred\n") |
|
sys.__stdin__ / sys.__stdout__ / sys.__stderr__ |
原始标准流(未被重定向的) | io.TextIOWrapper |
常用于恢复被修改的标准流 | |
| 命令行参数 | sys.argv |
命令行参数列表(第一个是脚本名) | list[str] |
['script.py', 'arg1', 'arg2'] |
sys.argv[1:] |
获取实际参数 | list[str] |
['arg1', 'arg2'] |
|
| 程序退出 | sys.exit([status]) |
终止程序并返回状态码,0表示正常退出 |
无返回 | sys.exit(1) |
sys.exitfunc (Python ❤️.9) |
注册退出时执行的函数(已废弃,建议用 atexit) |
function |
— | |
| 异常信息 | sys.exc_info() |
返回最近一次异常信息 (type, value, traceback) |
tuple |
用于异常调试 |
sys.last_type, sys.last_value, sys.last_traceback |
最近未捕获异常的信息(交互模式下有效) | 各种对象 | — | |
| 内存与性能 | sys.getsizeof(obj) |
返回对象所占字节数 | int |
sys.getsizeof('abc') |
sys.getrefcount(obj) |
返回对象引用计数(仅 CPython 有效) | int |
sys.getrefcount(x) |
|
sys.getrecursionlimit() |
返回当前递归深度限制 | int |
1000 |
|
sys.setrecursionlimit(limit) |
设置递归深度限制(慎用) | None |
sys.setrecursionlimit(2000) |
|
sys.getswitchinterval() |
线程切换间隔(秒) | float |
0.005 |
|
sys.setswitchinterval(interval) |
修改线程切换间隔 | None |
sys.setswitchinterval(0.01) |
|
| 垃圾回收接口 | sys.getallocatedblocks() |
返回内存中分配的块数(CPython 专有) | int |
— |
| 文件系统交互 | sys.getfilesystemencodeerrors() |
返回文件系统错误处理方式 | str |
'surrogateescape' |
| 交互环境 | sys.ps1, sys.ps2 |
交互模式提示符(如 >>> 和 ...) |
str |
'>>> ' |
| 解释器状态控制 | sys.is_finalizing() |
判断解释器是否正在关闭 | bool |
True / False |
四、核心功能详解
1️⃣ 命令行参数处理:sys.argv
# demo.py
import sys
print(sys.argv)
执行命令:
python demo.py hello world
输出:
['demo.py', 'hello', 'world']
✅ 应用场景:轻量命令行工具、批处理脚本、自动化执行。
2️⃣ 程序退出控制:sys.exit()
if error_condition:sys.exit("发生错误,程序终止!")
⚠️ 注意:
sys.exit()会抛出SystemExit异常,可被try/except捕获。- 参数可以是数字或字符串。
3️⃣ 标准输入输出重定向
import sys# 输出到文件
with open('out.txt', 'w') as f:sys.stdout = fprint("输出被写入文件中")# 恢复输出
sys.stdout = sys.__stdout__
常用于日志重定向、捕获 print 输出。
4️⃣ 路径管理与动态加载模块
import sys# 查看模块搜索路径
print(sys.path)# 添加新模块路径
sys.path.append('/opt/custom_modules')
✅ 应用场景:
-
临时导入非标准库或本地模块;
-
替代环境变量
PYTHONPATH的快速调试方法。
5️⃣ 异常信息捕获:sys.exc_info()
import systry:1 / 0
except:exc_type, exc_value, exc_trace = sys.exc_info()print("异常类型:", exc_type)print("异常信息:", exc_value)
输出:
异常类型: <class 'ZeroDivisionError'>
异常信息: division by zero
✅ 应用场景:
-
自定义日志系统;
-
异常链追踪;
-
深层调试。
6️⃣ 获取解释器环境信息
import sys
print(sys.version)
print(sys.executable)
print(sys.platform)
✅ 可用于:
-
多平台兼容判断;
-
打印运行环境诊断信息;
-
跨系统执行脚本时自动调整行为。
7️⃣ 内存 & 性能监控函数
| 函数 | 作用 | 示例 |
|---|---|---|
sys.getsizeof(obj) |
查看对象占用的内存字节数 | sys.getsizeof([1,2,3]) → 80 |
sys.getrefcount(obj) |
查看对象引用次数(调试 GC 用) | sys.getrefcount(x) |
sys.getallocatedblocks() |
查看当前已分配内存块数量 | 用于性能诊断 |
五、使用技巧与实战示例
✅ 获取 Python 版本判断逻辑
import sys
if sys.version_info < (3, 8):print("请使用 Python 3.8 及以上版本")
✅ 安全退出脚本并返回状态码
import sysdef main():if len(sys.argv) < 2:print("Usage: script.py <filename>")sys.exit(1)print(f"Processing {sys.argv[1]}")if __name__ == "__main__":main()
✅ 捕获异常详细日志
import sys, tracebacktry:risky_function()
except Exception:traceback.print_exception(*sys.exc_info())
六、补充:平台标识参考表
| 平台 | sys.platform 值 |
说明 |
|---|---|---|
| Windows | 'win32' |
即使是 64 位系统也是 'win32' |
| Linux | 'linux' 或 'linux2'(旧版) |
— |
| macOS | 'darwin' |
— |
| AIX | 'aix' |
IBM UNIX 系统 |
| Android (PyDroid 等) | 'linux' |
与 Linux 相同 |
七、总结
| 领域 | 功能 | 常用成员 |
|---|---|---|
| 环境信息 | 获取版本、平台、解释器路径 | sys.version, sys.platform, sys.executable |
| 程序控制 | 退出、异常捕获 | sys.exit(), sys.exc_info() |
| I/O流 | 控制输入输出重定向 | sys.stdin, sys.stdout, sys.stderr |
| 路径管理 | 管理模块加载路径 | sys.path, sys.modules |
| 性能调优 | 获取内存、递归限制 | sys.getsizeof(), sys.setrecursionlimit() |
📘 总结语
sys 模块虽小,却是 Python 底层运行机制的“桥梁”,
它让你能直接触及解释器的“心脏”,控制执行流、管理资源、调试系统,是每位 Python 开发者必懂的核心模块之一。