platform.uname()是唯一能同时获取内核版本(release)和构建信息(version)的可靠方式;其返回namedtuple含system、node、release、version、machine五字段,需整体解读:linux用release即uname -r输出,macos中release为darwin版本号,windows中release仅为主版本号。

platform.uname() 是唯一能直接拿到内核版本(release)和构建信息(version)的可靠方式,platform.system() 和 platform.version() 单独调用都不够完整。
为什么 platform.version() 不能直接用
它只返回内核的 build string(比如 #1 SMP PREEMPT_DYNAMIC ...),不含版本号(如 6.8.0-52-generic),且在 Windows/macOS 上行为不一致:Windows 返回空字符串,macOS 返回 Darwin 内核 build 号但无主版本。真正需要的「内核版本号」藏在 platform.uname().release 里。
platform.uname() 各字段的实际含义
它返回一个命名元组,5 个字段必须一起看才完整:
-
system:操作系统名('Linux'、'Darwin'、'Windows') -
node:主机名 -
release:内核发行版号(Linux 是6.8.0-52-generic,macOS 是23.6.0,Windows 是10) -
version:内核构建字符串(含编译时间、配置等,非语义化版本) -
machine:硬件架构('x86_64'、'arm64')
示例:
import platform u = platform.uname() print(u.release) # Linux: '6.8.0-52-generic', macOS: '23.6.0', Windows: '10'
跨平台获取「可读内核版本」的稳妥写法
不同系统对「内核版本」的定义不同,硬统一格式反而出错。推荐按需取值:
- Linux:优先用
u.release,它就是uname -r的输出 - macOS:
u.release对应 Darwin 版本(23.6.0),对应 macOS 14.6;若需 macOS 版本,得查sw_vers命令或platform.mac_ver() - Windows:
u.release是主版本号('10'或'11'),要详细版本得用platform.version()(返回'10.0.22631')或调用os.sys.getwindowsversion()
简单判断逻辑:
import platform
u = platform.uname()
if u.system == 'Linux':
kernel = u.release
elif u.system == 'Darwin':
kernel = f'Darwin {u.release}'
elif u.system == 'Windows':
kernel = f'Windows {u.release}.{platform.version()}'
注意:platform.uname() 在容器中可能返回宿主机内核信息,不是容器运行时环境的真实内核——这点常被忽略。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











