Получение информации об ОС и версии Python, запущенной в среде.

Бизнес

Модуль platform стандартной библиотеки используется для получения информации об операционной системе, на которой запущен Python, и ее версии (релизе). Используя этот модуль, можно переключать процесс для каждой ОС и версии.

Здесь представлена следующая информация.

  • Получение имени ОС:platform.system()
  • Получение информации о версии (выпуске):platform.release(),version()
  • Получите ОС и версию сразу:platform.platform()
  • Примеры результатов для каждой ОС
    • macOS
    • Windows
    • Ubuntu
  • Пример кода для переключения обработки в зависимости от ОС

Если вы хотите узнать версию Python, на которой вы работаете, смотрите следующую статью.

Весь пример кода в первой половине статьи выполнен на 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 существует, и другими случаями.

Copied title and URL