Obter informações sobre o SO e a versão do Python em execução no ambiente.

O negócio

O módulo de plataforma de biblioteca padrão é utilizado para obter informações sobre o sistema operativo em que Python está a funcionar e a sua versão (lançamento). Usando este módulo, é possível mudar o processo para cada sistema operativo e versão.

A seguinte informação é fornecida aqui.

  • Obter o nome do SO:platform.system()
  • Obter informações sobre a versão (lançamento):platform.release(),version()
  • Obtenha o SO e a versão de uma só vez:platform.platform()
  • Exemplos de resultados para cada OS
    • macOS
    • Windows
    • Ubuntu
  • Código de amostra para mudar o processamento dependendo do SO

Se quiser saber a versão do Python que está a executar, veja o artigo seguinte.

Todo o código de amostra na primeira metade é executado em macOS Mojave 10.14.2; resultados de exemplo em Windows e Ubuntu são mostrados na segunda metade; funções específicas de SO são também discutidas na segunda metade.

Obter o nome do SO: platform.system()

O nome do SO é obtido por platform.system(). O valor de retorno é uma cadeia.

import platform

print(platform.system())
# Darwin

Obter informação da versão (lançamento): platform.release(), versão()

A versão do SO (lançamento) é obtida com as seguintes funções. Em ambos os casos, o valor de retorno é uma cadeia.

  • platform.release()
  • platform.version()

Como se mostra no exemplo seguinte, platform.release() devolve conteúdos mais simples.

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

Obtenha o SO e a versão de uma só vez: platform.platform()

O nome e a versão (lançamento) do SO podem ser obtidos em conjunto usando platform.platform(). O valor de retorno é uma string.

print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit

Se o valor do argumento for VERDADEIRO, apenas será devolvida informação mínima.

print(platform.platform(terse=True))
# Darwin-18.2.0

Há também um argumento semelhante.

print(platform.platform(aliased=True))
# Darwin-18.2.0-x86_64-i386-64bit

O resultado é o mesmo no ambiente do exemplo, mas alguns sistemas operacionais devolverão um pseudónimo como o nome do SO.

Se o alias for verdadeiro, devolve o resultado utilizando um alias em vez do nome comum do sistema. Por exemplo, o SunOS torna-se Solaris.
platform.platform() — Access to underlying platform’s identifying data — Python 3.10.0 Documentation

Exemplos de resultados para cada OS

Serão mostrados exemplos de resultados em macOS, Windows, e Ubuntu, bem como funções específicas de SO.

macOS

Exemplo do resultado em macOS Mojave 10.14.2. O mesmo que o exemplo mostrado acima.

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

Note-se que é Darwin, e não MacOS ou Mojave.
Para mais informações sobre Darwin, ver a página da Wikipedia. Há também uma descrição da correspondência entre o número da última versão e o nome em macOS.

Existe uma função específica do madOS chamada platform.mac_ver().
O valor de retorno é devolvido como um tuple (release, versioninfo, máquina).
No ambiente do exemplo, a versãoinfo é desconhecida e é um tuple de cordel vazio.

print(platform.mac_ver())
# ('10.14.2', ('', '', ''), 'x86_64')

Windows

Exemplo de resultados no 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

Note-se que o valor de retorno 10 de platform.release() é uma string, não um número inteiro.

Existe uma função específica do Windows chamada platform.win32_ver().
O valor de retorno é devolvido como um tuple (lançamento, versão, csd, ptype).
csd indica o estado do pacote de serviços.

print(platform.win32_ver())
# ('10', '10.0.17763', 'SP0', 'Multiprocessor Free')

Ubuntu

Exemplo do resultado no 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

Existe uma plataforma de funções específica para Unix.linux_distribution().
O valor de retorno é devolvido como um tuple (distname, versão, id).

print(platform.linux_distribution())
# ('Ubuntu', '18.04', 'bionic')

Note-se que platform.linux_distribution() foi removida em Python 3.8. Recomenda-se a utilização da distro biblioteca de terceiros, que necessita de ser instalada separadamente usando pip.

Código de amostra para mudar o processamento dependendo do SO

Se quiser mudar a função ou método a ser usado dependendo do SO, pode usar um método como platform.system() para determinar o valor.

O seguinte é um exemplo da obtenção da data de criação de um ficheiro.

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

Neste exemplo, o valor de platform.system() é primeiro utilizado para determinar se é Windows ou outro.
Depois, utiliza ainda o tratamento de excepções para mudar o processo entre o caso em que o atributo st_birthtime existe e os outros casos.