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

源代码: Lib/platform.py


备注

特定平台按字母顺序排列,Linux 包括在 Unix 小节之中。

跨平台

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

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

返回一个元素 (bits, linkage),其中包含可执行文件所使用的位架构和链接格式信息。 这两个值均以字符串形式返回。

无法确定的值将返回为形参预设所给出的值。 如果给出的位数为 '',则会使用 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()

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

请注意此返回值不同于 Python sys.version,它将总是包括 patchlevel (默认为 0)。

platform.python_version_tuple()

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

请注意此返回值不同于 Python sys.version,它将总是包括 patchlevel (默认为 '0')。

platform.release()

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

platform.system()

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

在 iOS 和 Android 上,这将返回面向用户的 OS 名称 (即 'iOS, 'iPadOS''Android')。 要获取内核名称 ('Darwin''Linux'),请使用 os.uname()

platform.system_alias(system, release, version)

返回别名为某些系统所使用的常见营销名称的 (system, release, version)。 它还会在可能导致混淆的情况下对信息进行一些重排序操作。

platform.version()

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

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

platform.uname()

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

processor 将根据需要延后获取。

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

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

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

在 3.9 版本发生变更: processor 将延后而不是立即被获取。

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)。 无法确定的值将设为由形参所给出的默认值 (默认均为 '')。

Deprecated since version 3.13, will be removed in version 3.15: 它基本上未经测试,具有令人迷惑的 API,并且仅适用于 Jython 支持。

Windows平台

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

从 Windows 注册表获取额外的版本信息并返回一个元组 (release, version, csd, ptype) 表示 OS 发行版, 版本号, CSD 级别 (Service Pack) 和 OS 类型 (多个/单个处理器)。无法确定的值被设置为作为参数给出的默认值(这些参数都默认为一个空字符串)。

一点提示: ptype 在单处理器的 NT 机器上为 'Uniprocessor Free' 而在多处理器的机器上则为 'Multiprocessor Free''Free' 是指该 OS 版本不包含调试代码。 它还可能包含 'Checked' 表示该 OS 版本使用了调试代码,即检测参数、范围等的代码。

platform.win32_edition()

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

Added in version 3.8.

platform.win32_is_iot()

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

Added in version 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 为 OS 名称;为 'iOS''iPadOS'

  • release 为字符串形式的 iOS 版本号 (例如 '17.2')。

  • model 为设备型号标识符;这对物理设备来说将是如 'iPhone13,2' 形式的字符串,或者对于模拟器来说则为 'iPhone'

  • is_simulator 是一个描述 app 是运行在模拟器上还是物理设备上的布尔值。

无法确定的条目会被设为由形参所给出的默认值。

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 或其子类。

成功时,该函数将返回一个字典,其中键和值均为字符串。 值当中的特殊字符例如 "{TX-PL-LABEL}#x60; 会被复原。 字段 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 以空格分隔并按优先级排序
        ids.extend(info["ID_LIKE"].split())
    return ids

Added in version 3.10.

Android 平台

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

获取 Android 设备信息。 返回一个具有下列属性的 namedtuple()。 无法确定的值会被设为由形参给出的默认值 。

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

  • api_level - 正在运行的设备的 API 级别,为整数形式 (例如 34 对应 Android 14)。 要获取构建 Python 所使用的 API 级别,参见 sys.getandroidapilevel()

  • manufacturer - 厂商名称

  • model - 型号名称 – 通常为商业名称或型号数字。

  • device - 设备名称 – 通常为型号数字或代号名。

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

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

Added in version 3.13.