Python中sys模块详解
Python sys
模块详解
sys
是 Python 的内建标准库之一,用于与 Python 解释器进行交互。
基本导入方式
import sys
常用属性与函数分类整理
1️⃣ sys.argv
:命令行参数列表
# test.py
import sys
print(sys.argv)# 运行:python test.py hello 123
# 输出:['test.py', 'hello', '123']
sys.argv[0]
是脚本本身的名称,后面是传入参数。
2️⃣ sys.path
:模块搜索路径列表
类似于环境变量 PYTHONPATH
。
import sys
print(sys.path)
你可以动态添加模块路径:
sys.path.append("/my/custom/module/dir")
3️⃣ sys.exit([arg])
:安全退出程序
if error:sys.exit("Error occurred!") # 打印并退出
exit(0)
表示正常退出;exit(非0)
表示异常退出;- 可用于脚本终止,常用于 CLI 工具中。
4️⃣ sys.version
/ sys.version_info
:Python 版本信息
print(sys.version) # 字符串形式
print(sys.version_info) # 元组形式:(major, minor, micro, releaselevel, serial)
可以用于做版本兼容性判断。
5️⃣ sys.platform
:操作系统标识
print(sys.platform)
# 'win32' / 'linux' / 'darwin'(macOS)
6️⃣ sys.stdin
/ sys.stdout
/ sys.stderr
用于处理标准输入/输出/错误流:
sys.stdout.write("Hello\n")
sys.stderr.write("Error!\n")
可用于重定向输出、自定义输入流(例如 GUI 控制台或日志重定向):
import sys
sys.stdout = open('output.log', 'w') # 输出重定向到文件
7️⃣ sys.modules
:已加载模块的字典
import math
print('math' in sys.modules) # True
可用于调试模块导入或懒加载机制。
8️⃣ sys.getsizeof(obj)
:获取对象占用内存大小(以字节为单位)
import sys
a = [1, 2, 3]
print(sys.getsizeof(a)) # 输出: 64 或更多,取决于平台
对于调试内存占用分析很有用(但不包括递归引用的大小)。
9️⃣ sys.maxsize
:当前平台整数最大值(64位机器是 2^63 - 1)
print(sys.maxsize) # 9223372036854775807
🔟 sys.exc_info()
:获取最近异常信息(用于异常处理框架)
try:1 / 0
except:import sysexc_type, exc_value, traceback = sys.exc_info()print(exc_type, exc_value)
✅ 其他常用函数和属性
函数 / 属性 | 说明 |
---|---|
sys.builtin_module_names | 查看所有内建模块名称 |
sys.getrecursionlimit() | 当前递归深度上限(默认1000) |
sys.setrecursionlimit(n) | 设置递归深度限制(慎用,过高可能崩溃) |
sys.getdefaultencoding() | 默认字符串编码(通常为 ‘utf-8’) |
sys.float_info | 浮点精度和范围信息 |
sys.flags | 启动 Python 解释器时使用的命令行参数状态 |
注意事项
- 不要滥用
sys.exit()
,除非你明确需要强制终止程序。 - 修改
sys.path
是临时的,建议使用虚拟环境或PYTHONPATH
环境变量管理模块路径。 sys.stdin/stdout/stderr
修改后全局生效,建议只在明确控制输出的上下文中使用。
示例:命令行工具模板(结合 sys.argv
与 sys.exit
)
import sysdef main():if len(sys.argv) != 2:print("Usage: python tool.py <filename>")sys.exit(1)filename = sys.argv[1]try:with open(filename) as f:content = f.read()print(content)except FileNotFoundError:print("File not found!")sys.exit(2)if __name__ == '__main__':main()
总结:sys
模块用途速查表
功能领域 | 常用项 |
---|---|
交互参数 | argv , exit , version , flags |
系统信息 | platform , maxsize , path |
输入输出流 | stdin , stdout , stderr |
内存控制 | getsizeof , getrecursionlimit |
异常管理 | exc_info() |
模块调试 | modules , builtin_module_names |