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
,machine
和processor
。processor
是在需要時才延遲解析的。注意:前兩個屬性名稱與
os.uname()
提供的名稱不同,後者將它們命名為sysname
和nodename
。無法確定的條目被設定為
''
。在 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'
,在多處理器機器上是'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
,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)¶
獲取 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 版本加入。
命令列用法¶
python -m platform [--terse] [--nonaliased] [{nonaliased,terse} ...]
接受以下選項
- --terse¶
列印關於平臺的簡要資訊。這相當於呼叫
platform.platform()
並將 *terse* 引數設定為True
。
- --nonaliased¶
列印不帶系統/OS 名稱別名的平臺資訊。這相當於呼叫
platform.platform()
並將 *aliased* 引數設定為True
。
你也可以傳遞一個或多個位置引數(terse
, nonaliased
)來明確控制輸出格式。它們的行為與其對應的選項相似。