platform --- 访问底层平台的标识数据

源代码:Lib/platform.py


备注

按字母顺序列出特定平台,其中 Linux 包含在 Unix 部分中。

跨平台

platform.architecture(executable=sys.executable, bits='', linkage='')

查询给定的可执行文件(默认为 Python 解释器二进制文件)的各种架构信息。

返回一个元组 (bits, linkage),其中包含有关可执行文件的位架构和链接格式的信息。两个值都以字符串形式返回。

无法确定的值将按照参数预设值返回。如果 bits 给出的是 '',则使用 sizeof(pointer)(在 Python 版本 < 1.5.2 上为 sizeof(long))作为支持的指针大小的指示器。

该函数依赖于系统的 file 命令来完成实际工作。这在大多数(如果不是全部)Unix 平台和一些非 Unix 平台上可用,并且仅当可执行文件指向 Python 解释器时才可用。当上述需求未满足时,将使用合理的默认值。

备注

在 macOS(以及可能的其他平台)上,可执行文件可能是包含多种架构的通用文件。

要获取当前解释器的“64位性”,查询 sys.maxsize 属性会更可靠。

is_64bits = sys.maxsize > 2**32
platform.machine()

返回机器类型,例如 'AMD64'。如果无法确定该值,则返回一个空字符串。

输出结果是平台相关的,并且可能在大小写和命名约定上有所不同。

platform.node()

返回计算机的网络名称(可能不是完全限定的!)。如果无法确定该值,则返回空字符串。

platform.platform(aliased=False, terse=False)

返回一个标识底层平台的单一字符串,包含尽可能多的有用信息。

输出结果旨在*人类可读*,而非机器可解析。它在不同平台上可能看起来不同,这是特意设计的。

如果 *aliased* 为真,函数将为报告的系统名称与其通用名称不同的各种平台使用别名,例如 SunOS 将报告为 Solaris。 system_alias() 函数用于实现此功能。

将 *terse* 设置为真会使函数只返回识别平台所需的绝对最少信息。

在 3.8 版本发生变更: 在 macOS 上,如果 mac_ver() 返回非空的发布字符串,该函数现在会使用它来获取 macOS 版本,而不是 darwin 版本。

platform.processor()

返回(真实的)处理器名称,例如 'amdk6'

如果无法确定该值,则返回空字符串。请注意,许多平台不提供此信息,或者只是返回与 machine() 相同的值。NetBSD 就是这样。

platform.python_build()

返回一个元组 (buildno, builddate),以字符串形式表示 Python 的构建号和日期。

platform.python_compiler()

返回一个标识用于编译 Python 的编译器的字符串。

platform.python_branch()

返回一个标识 Python 实现 SCM 分支的字符串。

platform.python_implementation()

返回一个标识 Python 实现的字符串。可能的返回值有:'CPython', 'IronPython', 'Jython', 'PyPy'。

platform.python_revision()

返回一个标识 Python 实现 SCM 修订版的字符串。

platform.python_version()

以字符串 'major.minor.patchlevel' 的形式返回 Python 版本。

请注意,与 Python 的 sys.version 不同,返回的值将始终包含修订级别(默认为0)。

platform.python_version_tuple()

将 Python 版本以字符串元组 (major, minor, patchlevel) 的形式返回。

请注意,与 Python 的 sys.version 不同,返回的值将始终包含修订级别(默认为 '0')。

platform.release()

返回系统的发布版本,例如 '2.2.0''NT'。如果无法确定该值,则返回空字符串。

platform.system()

返回系统/OS 名称,例如 'Linux', 'Darwin', 'Java', 'Windows'。如果无法确定该值,则返回空字符串。

在 iOS 和 Android 上,该函数返回面向用户的操作系统名称(即 'iOS', 'iPadOS''Android')。要获取内核名称('Darwin''Linux'),请使用 os.uname()

platform.system_alias(system, release, version)

返回 (system, release, version),并为某些系统使用常见的市场名称作为别名。在某些情况下,它还会对信息进行重新排序,以避免混淆。

platform.version()

返回系统的发布版本,例如 '#3 on degas'。如果无法确定该值,则返回空字符串。

在 iOS 和 Android 上,这是面向用户的操作系统版本。要获取 Darwin 或 Linux 内核版本,请使用 os.uname()

platform.uname()

相当可移植的 uname 接口。返回一个 namedtuple(),包含六个属性:system, node, release, version, machineprocessor

processor 是在需要时才延迟解析的。

注意:前两个属性名称与 os.uname() 提供的名称不同,后者将它们命名为 sysnamenodename

无法确定的条目被设置为 ''

在 3.3 版本发生变更: 结果从元组更改为 namedtuple()

在 3.9 版本发生变更: processor 是延迟解析而不是立即解析。

platform.invalidate_caches()

清除内部信息缓存,例如 uname() 的缓存。当平台的 node() 被外部进程更改并且需要检索更新后的值时,这通常很有用。

在 3.14 版本加入。

Java 平台

platform.java_ver(release='', vendor='', vminfo=('', '', ''), osinfo=('', '', ''))

Jython 的版本接口。

返回一个元组 (release, vendor, vminfo, osinfo),其中 *vminfo* 是一个元组 (vm_name, vm_release, vm_vendor),*osinfo* 是一个元组 (os_name, os_version, os_arch)。无法确定的值被设置为作为参数给出的默认值(所有默认值均为 '')。

自 3.13 版本起废弃,将在 3.15 版本中移除: 它基本上未经测试,API 令人困惑,并且只对 Jython 支持有用。

Windows 平台

platform.win32_ver(release='', version='', csd='', ptype='')

从 Windows 注册表获取附加版本信息,并返回一个元组 (release, version, csd, ptype),分别表示操作系统发布版本、版本号、CSD 级别(服务包)和操作系统类型(多/单处理器)。无法确定的值将设置为作为参数给出的默认值(所有默认值都为空字符串)。

提示:在单处理器 NT 机器上 *ptype* 是 'Uniprocessor Free',在多处理器机器上是 'Multiprocessor Free''Free' 指的是操作系统版本不含调试代码。它也可能显示 'Checked',这意味着操作系统版本使用调试代码,即检查参数、范围等的代码。

platform.win32_edition()

返回一个表示当前 Windows 版本的字符串,如果无法确定该值,则返回 None。可能的值包括但不限于 'Enterprise', 'IoTUAP', 'ServerStandard''nanoserver'

在 3.8 版本加入。

platform.win32_is_iot()

如果 win32_edition() 返回的 Windows 版本被识别为 IoT 版本,则返回 True

在 3.8 版本加入。

macOS 平台

platform.mac_ver(release='', versioninfo=('', '', ''), machine='')

获取 macOS 版本信息并将其作为元组 (release, versioninfo, machine) 返回,其中 *versioninfo* 是一个元组 (version, dev_stage, non_release_version)

无法确定的条目被设置为 ''。所有元组条目都是字符串。

iOS 平台

platform.ios_ver(system='', release='', model='', is_simulator=False)

获取 iOS 版本信息并将其作为具有以下属性的 namedtuple() 返回。

  • system 是操作系统名称;可以是 'iOS''iPadOS'

  • release 是 iOS 版本号,为字符串(例如 '17.2')。

  • model 是设备型号标识符;对于物理设备,这将是一个类似 'iPhone13,2' 的字符串,或在模拟器上为 'iPhone'

  • is_simulator 是一个布尔值,描述应用程序是在模拟器上运行还是在物理设备上运行。

无法确定的条目将设置为作为参数给出的默认值。

Unix 平台

platform.libc_ver(executable=sys.executable, lib='', version='', chunksize=16384)

尝试确定可执行文件(默认为 Python 解释器)所链接的 libc 版本。返回一个字符串元组 (lib, version),如果查找失败,则默认为给定的参数。

请注意,此函数深入了解了不同 libc 版本如何向可执行文件添加符号,因此可能仅适用于使用 gcc 编译的可执行文件。

文件以 *chunksize* 字节的块进行读取和扫描。

Linux 平台

platform.freedesktop_os_release()

os-release 文件获取操作系统标识,并以字典形式返回。 os-release 文件是 freedesktop.org 标准,在大多数 Linux 发行版中都可用。一个明显的例外是 Android 和基于 Android 的发行版。

/etc/os-release/usr/lib/os-release 都无法读取时,引发 OSError 或其子类。

成功时,函数返回一个字典,其中键和值都是字符串。值的特殊字符如 "$ 会被去除引号。根据标准,字段 NAME, IDPRETTY_NAME 总是被定义的。所有其他字段都是可选的。供应商可能会包含额外的字段。

请注意,像 NAME, VERSIONVARIANT 这样的字段是适合呈现给用户的字符串。程序应使用像 ID, ID_LIKE, VERSION_IDVARIANT_ID 这样的字段来识别 Linux 发行版。

示例

def get_like_distro():
    info = platform.freedesktop_os_release()
    ids = [info["ID"]]
    if "ID_LIKE" in info:
        # ids are space separated and ordered by precedence
        ids.extend(info["ID_LIKE"].split())
    return ids

在 3.10 版本加入。

Android 平台

platform.android_ver(release='', api_level=0, manufacturer='', model='', device='', is_emulator=False)

获取 Android 设备信息。返回一个包含以下属性的 namedtuple()。无法确定的值将设置为作为参数给出的默认值。

  • release - Android 版本,字符串形式 (例如 "14")。

  • api_level - 运行设备的 API 级别,整数形式(例如 Android 14 为 34)。要获取 Python 构建时所依据的 API 级别,请参阅 sys.getandroidapilevel()

  • manufacturer - 制造商名称

  • model - 型号名称——通常是市场营销名称或型号。

  • device - 设备名称——通常是型号或代号。

  • is_emulator - 如果设备是模拟器则为 True;如果是物理设备则为 False

Google 维护着一个 已知型号和设备名称列表

在 3.13 版本加入。

命令行用法

platform 也可以使用解释器的 -m 开关直接调用。

python -m platform [--terse] [--nonaliased] [{nonaliased,terse} ...]

接受以下选项

--terse

打印关于平台的简要信息。这相当于调用 platform.platform() 并将 *terse* 参数设置为 True

--nonaliased

打印不带系统/OS 名称别名的平台信息。这相当于调用 platform.platform() 并将 *aliased* 参数设置为 True

你也可以传递一个或多个位置参数(terse, nonaliased)来明确控制输出格式。它们的行为与其对应的选项相似。