"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（也許還有其他平臺）上，可執行檔案可能是包含多種架構的通
     用檔案。To get at the "64-bitness" of the current interpreter, it
     is more reliable to query the "sys.maxsize" attribute:

        is_64bits = sys.maxsize > 2**32

platform.machine()

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

platform.node()

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

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

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

   輸出應為*人類易讀的 (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'"。如果該值無法確定則回傳一個空字串。

platform.system_alias(system, release, version)

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

platform.version()

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

platform.uname()

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

   請注意此函式新增的第六個屬性 ("processor") 並不存在於 "os.uname()"
   的結果中。並且前兩個屬性的屬性名稱也不一致；"os.uname()" 是將它們稱
   為 "sysname" 和 "nodename"。

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

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


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)"。無法確定的值將被設為由參數所給定
   的預設值（預設均為 "''"）。


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 條目均為字串。


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 版新加入.
