当前位置: 首页 > news >正文

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.argvsys.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

http://www.lqws.cn/news/76951.html

相关文章:

  • spring-boot接入websocket教程以及常见问题解决
  • 基于 51 单片机的智能饮水机控制系统设计与实现
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 达芬奇(DaVinci Resolve)下载安装教程
  • B树和B+树
  • MySQL DDL操作全解析:从入门到精通,包含索引视图分区表等全操作解析
  • 正则表达式在Java中的应用(补充)
  • Java垃圾回收机制详解:从原理到实践
  • new语法
  • 基于Python学习《Head First设计模式》第四章 工厂模式+抽象工厂
  • 《汇编语言》第13章 int指令——实验13 编写、应用中断例程
  • leetcode93.复原IP地址:回溯算法中段控制与前导零处理的深度解析
  • Spring Boot 3.X 下Redis缓存的尝试(一):初步尝试
  • Oracle授权操作
  • Mysql备份
  • 【MySQL】视图与用户管理
  • isp中的 ISO代表什么意思
  • Android Studio 配置之gitignore
  • 平滑技术(数据处理,持续更新...)
  • JAVA学习-练习试用Java实现“PCA(主成分分析) :用于降维和数据可视化”
  • DeepSeek模型安全部署与对抗防御全攻略
  • DAY43打卡
  • 力扣LeetBook数组和字符串--数组简介
  • 力扣HOT100之动态规划:32. 最长有效括号
  • 20250602在荣品的PRO-RK3566开发板的Android13下的uboot启动阶段配置BOOTDELAY为10s
  • 代码随想录算法训练营第四天| 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、1. 两数之和
  • 5.RV1126-OPENCV 图形计算面积
  • Android基于LiquidFun引擎实现软体碰撞效果
  • android binder(二)应用层编程实例
  • 循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例