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 為 true,該函式將使用各種平臺的別名,這些平臺的系統名稱與其常用名稱不同,例如 SunOS 將報告為 Solaris。 system_alias() 函式用於實現此目的。

terse 設定為 true 會導致該函式僅返回識別平臺所需的絕對最少資訊。

在 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 不同,返回的值將始終包含補丁級別(預設為 0)。

platform.python_version_tuple()

將 Python 版本作為字串元組 (major, minor, patchlevel) 返回。

請注意,與 Python sys.version 不同,返回的值將始終包含補丁級別(預設為 '0')。

platform.release()

返回系統的版本,例如 '2.2.0''NT'。如果無法確定值,則返回空字串。

platform.system()

返回系統/作業系統名稱,例如 '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(),其中包含六個屬性:systemnodereleaseversionmachineprocessor

processor 在需要時延遲解析。

注意:前兩個屬性名稱與 os.uname() 提供的名稱不同,在 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)。無法確定的值將設定為作為引數給出的預設值(所有引數都預設為 '')。

自 3.13 版本起已棄用,將在 3.15 版本中刪除: 它在很大程度上未經測試,具有令人困惑的 API,並且僅對 Jython 支援有用。

Windows 平臺

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

從 Windows 登錄檔中獲取其他版本資訊,並返回一個元組 (release, version, csd, ptype),分別表示作業系統版本、版本號、CSD 級別(服務包)和作業系統型別(多處理器/單處理器)。無法確定的值將設定為作為引數給出的預設值(所有引數都預設為空字串)。

提示:在單處理器 NT 計算機上,ptype'Uniprocessor Free',在多處理器計算機上,ptype'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() 返回,該 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 或其子類異常。

成功時,該函式返回一個字典,其中鍵和值均為字串。值會去除其特殊字元的引號,例如 "$。根據標準,始終定義了欄位 NAMEIDPRETTY_NAME。所有其他欄位都是可選的。供應商可以包含其他欄位。

請注意,諸如 NAMEVERSIONVARIANT 之類的欄位是適合向用戶展示的字串。程式應使用諸如 IDID_LIKEVERSION_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 版本中新增。