Python 模块sys详解

news/2025/10/29 20:54:39/文章来源:https://www.cnblogs.com/kyle-7Qc/p/19175378

一、模块简介

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 开发者必懂的核心模块之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/950243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请问

请问报告名称:AR(AA Reverse)fin cut工艺业务需求与数据目标报告 版本:V1.0 日期:2025-9-4 编制人:[李晓睿/数字智能部] 审核人:[姓名/部门] 引言 1.1 背景与业务场景项目发起背景(业务痛点、现有问题等) 工艺…

2024 暑期模拟赛 #5

100 + 100 + 60 + 0 = 260, Rank 1/6.2024暑期CSP-S&NOIP模拟赛第5套 链接:link 题解:link 时间:4h (2025.10.29 14:00~18:00) 题目数:4 难度:A B C D\(\color{#FFC116} 黄\) \(\color{#52C41A} 绿\) \(\colo…

中断向量表10.29

今天学到了一个咩用的知识,台式电脑的主板有的支持集成显卡和独立显卡同时输出,有的不支持。只能同时单个输出,但是可以在一个显卡上接两个显示器实现分屏。此电脑-属性-设备管理器-显示适配器 单片机在启动时一般先…

Nordic无线开发---nRF Connect SDK 3.0更新版的安装入门介绍

2025.10.14更新: 增加了NCS v3.1.0和v3.1.1在中文Windows系统上编码问题的解决方案 增加了说明,nrfutil sdk-manager以及解决了SDK在Windows系统上git状态错误的问题 nRF Connect SDK,简称NCS,是Nordic最新的SDK平…

macOS镜像下载地址

macOS Catalina 10.15.7 (19H2) (无第三方引导)文件:macOS Catalina 10.15.7 19H2.dmg大小:7.71GBMD5:5F15506A22A11A0FE17E3DAE463FCEB8SHA1:43EBEDD8CDE672B2FC29A38DDAB91B3FD56571C5SHA256:D3AA8D17B9CF123…

关于 google 登陆的一些奇妙技巧

起源是某一次在机房心血来潮登 google 账号,在被此电话号码无法用于验证弄红温之后疯狂回退,结果意外发现登上了! 具体操作如下: 首先点击登录界面,正常输入邮箱、密码,然后会让你验证一下手机, 这个时候我们选…

移位寄存器 蓝色 与 粉红色 有什么区别

移位寄存器 蓝色 与 粉红色 有什么区别你已经注意到 LabVIEW 的移位寄存器 会出现不同颜色,比如 蓝色 和 粉红色,这其实代表的是 数据类型(Data Type)不同,并不影响移位寄存器的逻辑功能。🎨 一、颜色 = 数据类…

第9天(中等题 滑动窗口)

打卡第九天 2道中等题题目:代码: class Solution { public:int longestOnes(vector<int>& nums, int k) {int ans = 0, left = 0, cnt0 = 0;for (int right = 0; right < nums.size(); right++) {cnt0 +=…

Palantir Ontology 技术深度解析:化繁为简,连接数据与决策的数字孪生

Palantir Ontology 技术深度解析:化繁为简,连接数据与决策的数字孪生Palantir Technologies,这家以《指环王》中“真知晶球”命名的大数据分析公司,其核心技术之一 Ontology(本体) 正是其平台(如 Foundry 和 Go…

CF1196F K-th Path

经典赛前活动脑子。 一般碰到这种题思考一些特殊性。 考虑答案一定不大于边权第 \(k\) 小的边权,所以现在只有起点为前 \(k\) 小边权的端点能够成为答案,暴力跑即可。 还是要想到单独一条边的情况。

转换FastText训练数据格式到Parquet(Polars,KIMI)

转换FastText训练数据格式到Parquet(Polars,KIMI)User: 你知道fasttext用于训练的数据格式吗? Kimi: FastText 的训练数据格式非常简单:每一行代表一个训练样本。 对于文本分类任务,每行的开头是标签(label) ,…

PlantAssistant-VUE属性数据

PlantAssistant-VUE属性数据 引言 依托主流工厂设计软件数字化交付数据文件,AVEVA公司PDMS/E3D的RVM和Intergraph公司SP3D的VUE:VUE 属性数据 SP3D的VUE文件一般可以导出两种属性文件,一种是XML文件,一种是MDB2文件…

由 Mybatis 源码畅谈软件设计(四):动态 SQL 执行流程

本节我们探究动态 SQL 的执行流程,由于在前一节我们已经对各个组件进行了详细介绍,所以本节不再赘述相关内容,在本节中主要强调静态 SQL 和动态 SQL 执行的不同之处。在这个过程中,SqlNode 相关实现值得关注,它为…

数学证明的一些记录

T[2025/10/29]: 题目链接:https://codeforces.com/gym/105578/problem/B \(n与m互质,i从1到n,j从1到m,式子im+jn \% nm\),对于任何一对\(i j\),式子的值都不同 要证明这个式子,即证明不存在一对i,j使得 f(i1,j1)…

10.29(续)

代码大全2的6-10章读后感: 第 6 章 “变量命名的艺术” 看似基础,却直击编程中的 “沟通痛点”。书中强调 “好的命名应能自我说明,让读者无需查看上下文就能理解变量含义”,这一点让我深受触动。以往我常为图方便…

DicomObjects .NET 8.48.231.0 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025.10.29__jyu每日一题题解

完全平方数 题目大意 给定一个正整数 \(n\),找到最小的正整数 x,使得它们的乘积是一个完全平方数。 思路 1. 定理 算术基本定理指出:任何大于1的自然数 \(N\),要么本身是素数,要么可以唯一地分解为有限个素数的乘…

CSP-J/S2024 游记

一个蒟蒻的CSP-J/S2024游记可能是全网写得最晚的一篇 CSP-J/S2024 游记 歌:Fin.ArcDeaR - MisoilePunch♪ ~タケノコ添え~ 游记 Day 0x80000000 在表弟家玩时得知了csp报名的事 申请报名了,但一直没有审核通过 结果…

以《出师表》作为例子,对比通用分块和父子分块的区别

我们以《出师表》(节选)为例,通过具体分割结果对比**通用分块**和**父子分块**的核心差异。《出师表》结构清晰(含表文开头、历史回顾、治国建议、出师目的等部分),适合展示两种分块策略的不同逻辑。以《出师表》…