"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", "machine" 和 "processor"。

   "processor" 将根据需要延后获取。

   注意：前两个属性名称与 "os.uname()" 所提供的名称不同，后者是被命名
   为 "sysname" 和 "nodename"。

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

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

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

platform.invalidate_caches()

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

   Added in version 3.14.


Java platform
=============

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

   Version interface for Jython.

   Returns a tuple "(release, vendor, vminfo, osinfo)" with *vminfo*
   being a tuple "(vm_name, vm_release, vm_vendor)" and *osinfo* being
   a tuple "(os_name, os_version, os_arch)". Values which cannot be
   determined are set to the defaults given as parameters (which all
   default to "''").

   从 3.13 版起已弃用，将在 3.15 版中移除: It was largely untested,
   had a confusing API, and was only useful for Jython support.


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

   成功时，该函数将返回一个字典，其中键和值均为字符串。 值当中的特殊字
   符例如 """ 和 "$" 会被复原。 字段 "NAME", "ID" 和 "PRETTY_NAME" 总
   是会按照标准来定义。 所有其他字段都是可选的。  厂商可能会包括额外的
   字段。

   请注意 "NAME", "VERSION" 和 "VARIANT" 等字段是适用于向用户展示的字
   符串。 程序应当使用 "ID", "ID_LIKE", "VERSION_ID" 或 "VARIANT_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.


命令行用法
==========

"platform" 也可通过解释器的 "-m" 开关来直接唤起:

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

可以接受以下选项：

--terse

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

--nonaliased

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

你还可以传递一个或多个位置参数 ("terse"、"nonaliased") 来显式控制输出
格式。 它们的行为与相应的选项相似。
