Модуль platform стандартной библиотеки используется для получения информации об операционной системе, на которой запущен Python, и ее версии (релизе). Используя этот модуль, можно переключать процесс для каждой ОС и версии.
Здесь представлена следующая информация.
- Получение имени ОС:
platform.system()
- Получение информации о версии (выпуске):
platform.release()
,version()
- Получите ОС и версию сразу:
platform.platform()
- Примеры результатов для каждой ОС
- macOS
- Windows
- Ubuntu
- Пример кода для переключения обработки в зависимости от ОС
Если вы хотите узнать версию Python, на которой вы работаете, смотрите следующую статью.
- Похожие статьи:Проверка и отображение версии Python (например, sys.version)
Весь пример кода в первой половине статьи выполнен на macOS Mojave 10.14.2; примеры результатов на Windows и Ubuntu показаны во второй половине; во второй половине также обсуждаются функции, специфичные для конкретной ОС.
Получение имени ОС: platform.system()
Имя ОС получается с помощью platform.system(). Возвращаемое значение — строка.
import platform
print(platform.system())
# Darwin
Получение информации о версии (релизе): platform.release(), version()
Информация о версии (выпуске) ОС получается с помощью следующих функций. В обоих случаях возвращаемое значение — строка.
platform.release()
platform.version()
Как показано в следующем примере, platform.release() возвращает более простое содержимое.
print(platform.release())
# 18.2.0
print(platform.version())
# Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64
Получите ОС и версию сразу: platform.platform().
Имя ОС и информацию о версии (релизе) можно получить вместе с помощью platform.platform(). Возвращаемое значение — строка.
print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit
Если значение аргумента terse равно TRUE, будет возвращена только минимальная информация.
print(platform.platform(terse=True))
# Darwin-18.2.0
Существует также аргумент aliased.
print(platform.platform(aliased=True))
# Darwin-18.2.0-x86_64-i386-64bit
Результат будет таким же в среде примера, но некоторые операционные системы вернут псевдоним в качестве имени ОС.
Если aliased равно true, то результат возвращается с использованием псевдонима вместо общего имени системы. Например, SunOS становится Solaris.
platform.platform() — Access to underlying platform’s identifying data — Python 3.10.0 Documentation
Примеры результатов для каждой ОС
Будут показаны примеры результатов на macOS, Windows и Ubuntu, а также функции, специфичные для конкретных ОС.
macOS
Пример результата на macOS Mojave 10.14.2. То же самое, что и в примере, показанном выше.
print(platform.system())
# Darwin
print(platform.release())
# 18.2.0
print(platform.version())
# Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64
print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit
Обратите внимание, что это Darwin, а не macOS или Mojave.
Более подробную информацию о Darwin можно найти на странице Википедии. Там же есть описание соответствия между номером последней версии и именем в macOS.
Существует специфическая для madOS функция platform.mac_ver().
Возвращаемое значение возвращается в виде кортежа (release, versioninfo, machine).
В среде примера versioninfo неизвестна и представляет собой пустой кортеж строк.
print(platform.mac_ver())
# ('10.14.2', ('', '', ''), 'x86_64')
Windows
Пример результатов на Windows 10 Home.
print(platform.system())
# Windows
print(platform.release())
# 10
print(platform.version())
# 10.0.17763
print(platform.platform())
# Windows-10-10.0.17763-SP0
Обратите внимание, что возвращаемое значение 10 функции platform.release() является строкой, а не целым числом.
Существует специфическая для Windows функция platform.win32_ver().
Возвращаемое значение возвращается в виде кортежа (release, version, csd, ptype).
csd указывает на статус пакета обновления.
print(platform.win32_ver())
# ('10', '10.0.17763', 'SP0', 'Multiprocessor Free')
Ubuntu
Пример результата на Ubuntu 18.04.1 LTS.
print(platform.system())
# Linux
print(platform.release())
# 4.15.0-42-generic
print(platform.version())
# #45-Ubuntu SMP Thu Nov 15 19:32:57 UTC 2018
print(platform.platform())
# Linux-4.15.0-44-generic-x86_64-with-Ubuntu-18.04-bionic
Существует специфическая для Unix функция platform.linux_distribution().
Возвращаемое значение возвращается в виде кортежа (distname, version, id).
print(platform.linux_distribution())
# ('Ubuntu', '18.04', 'bionic')
Обратите внимание, что platform.linux_distribution() была удалена в Python 3.8. Вместо нее рекомендуется использовать дистрибутив библиотеки стороннего производителя, который необходимо установить отдельно с помощью pip.
Пример кода для переключения обработки в зависимости от ОС
Если вы хотите переключить функцию или метод, который будет использоваться в зависимости от ОС, вы можете использовать такой метод, как platform.system() для определения значения.
Ниже приведен пример получения даты создания файла.
def creation_date(path_to_file):
"""
Try to get the date that a file was created, falling back to when it was
last modified if that isn't possible.
See http://stackoverflow.com/a/39501288/1709587 for explanation.
"""
if platform.system() == 'Windows':
return os.path.getctime(path_to_file)
else:
stat = os.stat(path_to_file)
try:
return stat.st_birthtime
except AttributeError:
# We're probably on Linux. No easy way to get creation dates here,
# so we'll settle for when its content was last modified.
return stat.st_mtime
В этом примере сначала используется значение platform.system(), чтобы определить, Windows это или другое.
Затем он использует обработку исключений для переключения процесса между случаем, когда атрибут st_birthtime существует, и другими случаями.