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)來明確控制輸出格式。它們的行為與其對應的選項相似。