当前位置: 首页 > 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.xdnf.cn/news/776143.html

相关文章:

  • 云服务器突发宕机或无响应怎么办
  • 【PCB设计】STM32开发板——电源设计
  • Java注释详解:单行、多行与文档注释的区别与应用
  • c++泛型编程入门与STL介绍
  • ps色阶调整
  • 样本量计算:两独立样本定量资料——平均值差的置信区间法
  • Dify 部署问题处理
  • 本地部署 DeepSeek R1(最新)【从下载、安装、使用和调用一条龙服务】
  • MySQL触发器与视图
  • 什么是阻抗匹配
  • Python训练营---Day43
  • 一键解决Github无法访问或时断时续的问题-Linux环境
  • 页岩油开采的阶段
  • 无畏契约 directx runtime修复
  • 【CATIA的二次开发18】根对象Application涉及用户交互相关方法
  • MyBatis04:SpringBoot整合MyBatis——多表关联|延迟加载|MyBatisX插件|SQL注解
  • 《棒球万事通》棒球特长生升学方向·棒球1号位
  • 【CF】Day73——Codeforces Round 887 (Div. 2) B (思维 + 模拟)
  • 【基于阿里云搭建数据仓库(离线)】DataWorks中删除节点
  • 【C语言预处理详解(上)】--预定义符号,#define定义常量,#define定义宏,带有副作用的宏参数,宏替换的规则,宏和函数的对比
  • 【MIMO稳定裕度】基于数据驱动的多输入多输出系统稳定裕度分析
  • 【HW系列】—安全设备介绍(开源蜜罐的安装以及使用指南)
  • Ubuntu20.04 LTS 升级Ubuntu22.04LTS 依赖错误 系统崩溃重装 Ubuntu22.04 LTS
  • Qt共享内存(QSharedMemory)使用指南
  • openai-java
  • 白银价格查询接口如何用Java进行调用?
  • 【nm】nm命令的使用:查看.so中的符号信息
  • ps自然饱和度调整
  • 江科大RTC实时时钟hal库实现
  • 模块二:C++核心能力进阶(5篇)第三篇:《异常安全:RAII与异常传播的最佳实践》