"platform" ---  對底層平臺識別資料的存取
****************************************

**原始碼：**Lib/platform.py

======================================================================

備註:

  特定平臺清單為按字母順序排列，Linux 包括在 Unix 小節之中。


跨平台
======

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

   查詢給定的可執行檔案（預設為 Python 直譯器二進位制檔案）來取得各種
   架構資訊。

   回傳一個 tuple（元組） "(bits, linkage)"，其中包含可執行檔案所使用
   的位元架構和連結格式資訊。這兩個值均以字串形式回傳。

   無法確定的值將回傳參數所給定之預先設置值。如果給定的位元為 "''"，則
   會使用 "sizeof(pointer)"（或者當 Python 版本 < 1.5.2 時為
   "sizeof(long)"）作為所支援指標大小的指示器 (indicator)。

   此函式依賴於系統的 "file" 命令來執行實際的操作。這在幾乎所有 Unix
   平臺和某些非 Unix 平臺上，只有當可執行檔案指向 Python 直譯器時才可
   使用。當以上要求不滿足時將會使用合理的預設值。

   備註:

     在 macOS（也許還有其他平臺）上，可執行檔案可能是包含多種架構的通
     用檔案。要取得目前直譯器的 "64 位元性 (64-bitness)"，更可靠的做法
     是查詢 "sys.maxsize" 屬性：

        is_64bits = sys.maxsize > 2**32

platform.machine()

   回傳機器種類，例如 "'AMD64'"。如果該值無法確定則會回傳一個空字串。

   The output is platform-dependent and may differ in casing and
   naming conventions.

platform.node()

   回傳電腦的網路名稱（可能不是完整名稱！）。如果該值無法確定則會回傳
   一個空字串。

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

   會儘可能附帶有用資訊地回傳一個標識底層平臺的字串。

   輸出應為*人類易讀的 (human readable)*，而非機器易剖析的 (machine
   parseable)。它在不同平臺上看起來可能不一致，這是有意為之的。

   如果 *aliased* 為真值，此函式將使用各種不同於平臺通用名稱的別名來回
   報系統名稱，例如 SunOS 將被回報為 Solaris。"system_alias()" 函式被
   用於實作此功能。

   將 *terse* 設為真值將導致此函式只回傳標識平臺所需的最小量資訊。

   在 3.8 版的變更: 在 macOS 上，如果 "mac_ver()" 回傳的釋出版字串非空
   字串，此函式現在會使用它以取得 macOS 版本而非 darwin 版本。

platform.processor()

   回傳（真實的）處理器名稱，例如 "'amdk6'"。

   如果該值無法確定則將回傳空字串。請注意，許多平臺都不提供此資訊或是
   簡單地回傳與 "machine()" 相同的值。NetBSD 則會提供此資訊。

platform.python_build()

   回傳一個 tuple "(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 版本以字串 tuple "(major, minor, patchlevel)" 形式回傳。

   請注意此回傳值不同於 Python "sys.version"，它總是會包括 patchlevel
   （預設為 "'0'"）。

platform.release()

   回傳系統的釋出版本，例如 "'2.2.0'" 或 "'NT'"，如果該值無法確定則將
   回傳一個空字串。

platform.system()

   回傳系統/OS 的名稱，例如 "'Linux'"、"'Darwin'"、"'Java'"、
   "'Windows'"。如果該值無法確定則回傳一個空字串。

   On iOS and Android, this returns the user-facing OS name (i.e,
   "'iOS", "'iPadOS'" or "'Android'"). To obtain the kernel name
   ("'Darwin'" or "'Linux'"), use "os.uname()".

platform.system_alias(system, release, version)

   回傳做為某些系統所使用的常見行銷名稱之別名的 "(system, release,
   version)"。它還會在可能導致混淆的情況下對資訊進行一些重新排序。

platform.version()

   回傳系統的釋出版本資訊，例如 "'#3 on degas'"。如果該值無法確定則將
   回傳一個空字串。

   On iOS and Android, this is the user-facing OS version. To obtain
   the Darwin or Linux kernel version, use "os.uname()".

platform.uname()

   具有高可攜性 (portable) 的 uname 介面。回傳包含六個屬性的
   "namedtuple()"："system"、"node"、"release"、"version"、"machine"
   和 "processor"。

   "processor" 會延遲解析，有需求時才會解析

   注意：前兩個屬性名稱與 "os.uname()" 提供的名稱不同，它們分別命名為
   "sysname" 和 "nodename"。

   無法確定的條目會被設為 "''"。

   在 3.3 版的變更: 將結果從 tuple 改為 "namedtuple()"。

   在 3.9 版的變更: "processor" 會延遲解析，並非立即解析。


Java 平台
=========

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

   Jython 的版本介面。

   回傳一個 tuple "(release, vendor, vminfo, osinfo)"，其中 *vminfo*
   為 tuple "(vm_name, vm_release, vm_vendor)" 而 *osinfo* 為 tuple
   "(os_name, os_version, os_arch)"。無法確定的值將被設為由參數所給定
   的預設值（預設均為 "''"）。

   Deprecated since version 3.13, will be removed in version 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 登錄檔 (Window Registry) 取得額外的版本資訊並回傳一個
   tuple "(release, version, csd, ptype)"，它代表 OS 發行版、版本號、
   CSD 級別 (service pack) 和 OS 類型（多個/單個處理器）。

   一點提示：*ptype* 在單個處理器的 NT 機器上為 "'Uniprocessor Free'"
   ，而在多個處理器的機器上為 "'Multiprocessor Free'"。"'Free'" 是指該
   OS 版本沒有除錯程式。它也可能以 "'Checked'" 表示，代表該 OS 版本使
   用了除錯程式，即檢查引數、範圍等的程式。

platform.win32_edition()

   回傳一個代表目前 Windows 版本的字串。可能的值包括但不限於
   "'Enterprise'"、"'IoTUAP'"、"'ServerStandard'" 和 "'nanoserver'"。

   在 3.8 版被加入.

platform.win32_is_iot()

   如果 "win32_edition()" 回傳的 Windows 版本被識別為 IoT 版則回傳
   "True"。

   在 3.8 版被加入.


macOS 平台
==========

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

   取得 Mac OS 版本資訊並將其回傳為 tuple "(release, versioninfo,
   machine)"，其中 *versioninfo* 是一個 tuple "(version, dev_stage,
   non_release_version)"。

   無法確定的條目會被設為 "''"。所有 tuple 條目均為字串。


iOS 平台
========

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

   Get iOS version information and return it as a "namedtuple()" with
   the following attributes:

   * "system" 是 OS 名稱；可能是 "'iOS'" 或 "'iPadOS'"。

   * "release" is the iOS version number as a string (e.g., "'17.2'").

   * "model" is the device model identifier; this will be a string
     like "'iPhone13,2'" for a physical device, or "'iPhone'" on a
     simulator.

   * "is_simulator" is a boolean describing if the app is running on a
     simulator or a physical device.

   無法確定的條目會被設定為以參數給定的預設值。


Unix 平台
=========

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

   嘗試確認可執行檔案（預設為 Python 直譯器）所連結到的 libc 版本。回
   傳一個字串 tuple "(lib, version)"，當查詢失敗時其預設值將被設為給定
   的參數值。

   請注意，此函式對於不同 libc 版本如何為可執行檔案新增符號的方式有深
   層的關聯，可能僅適用於以 **gcc** 編譯出來的可執行檔案。

   檔案會以 *chunksize* 位元組大小的分塊 (chunk) 來讀取和掃描。


Linux 平台
==========

platform.freedesktop_os_release()

   從 "os-release" 檔案取得作業系統標識，並將其作為一個字典回傳。"os-
   release" 檔案為 freedesktop.org 標準、並在大多數 Linux 發行版上可用
   。一個重要的例外是 Android 和基於 Android 的發行版。

   當 "/etc/os-release" 與 "/usr/lib/os-release" 均無法被讀取時將引發
   "OSError" 或其子類別。

   成功時，該函式將回傳一個字典，其中鍵和值均為字串。值當中的特殊字元
   例如 """ 和 "$" 會被移除引號 (unquoted)。欄位 "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 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)

   Get Android device information. Returns a "namedtuple()" with the
   following attributes. Values which cannot be determined are set to
   the defaults given as parameters.

   * "release" - Android version, as a string (e.g. ""14"").

   * "api_level" - API level of the running device, as an integer
     (e.g. "34" for Android 14). To get the API level which Python was
     built against, see "sys.getandroidapilevel()".

   * "manufacturer" - Manufacturer name.

   * "model" - Model name – typically the marketing name or model
     number.

   * "device" - Device name – typically the model number or a
     codename.

   * "is_emulator" - "True" if the device is an emulator; "False" if
     it's a physical device.

   Google maintains a list of known model and device names.

   在 3.13 版被加入.


命令列用法
==========

"platform" can also be invoked directly using the "-m" switch of the
interpreter:

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

可接受以下選項：

--terse

   Print terse information about the platform. This is equivalent to
   calling "platform.platform()" with the *terse* argument set to
   "True".

--nonaliased

   Print platform information without system/OS name aliasing. This is
   equivalent to calling "platform.platform()" with the *aliased*
   argument set to "True".

You can also pass one or more positional arguments ("terse",
"nonaliased") to explicitly control the output format. These behave
similarly to their corresponding options.
