Como verifico o sistema operacional em Python?

148

Quero verificar o sistema operacional (no computador em que o script é executado).

Eu sei que posso usar os.system('uname -o')no Linux, mas isso me dá uma mensagem no console e quero gravar em uma variável.

Tudo bem se o script puder dizer se é Mac, Windows ou Linux. Como posso verificar?

Kolek
fonte
1
Possível duplicata do Python: Em que SO estou executando?
TylerH 24/02/19

Respostas:

287

Você pode usar sys.platform:

from sys import platform
if platform == "linux" or platform == "linux2":
    # linux
elif platform == "darwin":
    # OS X
elif platform == "win32":
    # Windows...

sys.platformtem granularidade mais fina que sys.name.

Para os valores válidos, consulte a documentação .

Consulte também a resposta para "Em qual SO estou executando?"

o lobo
fonte
8
Observe que no cygwin, ele "cygwin"não retorna "win32"como alguém poderia esperar.
Michał Bentkowski
21
Obrigado. Qual é a diferença entre linux e linux2?
Tharindu Rusira
1
qual seria a saída para o BSD?
galois 28/03
1
Observe que, desde o Python 3.3, "linux2"não é mais um valor possível de platform(consulte os documentos vinculados para corroboração); portanto, se você precisar apenas suportar o Python 3.3 e posterior, poderá excluir com segurança a cláusula `or platform ==" linux2 "` da primeira condição.
Mark Amery
23

Se você deseja saber em qual plataforma está fora do "Linux", "Windows" ou "Darwin" (Mac), sem mais precisão, use:

>>> import platform
>>> platform.system()
'Linux'  # or 'Windows'/'Darwin'

A platform.systemfunção usa unameinternamente.

Laurent LAPORTE
fonte
1
Eu gosto desta solução, mas eu quero salientar que a partir dos docs ele afirma que ela retorne Linux, Windows, Javaou uma string vazia. devdocs.io/python~3.7/library/platform#platform.system
Brandon Benefield
2
@BrandonBenefield, a enumeração é um exemplo de valores possíveis. Nos dispositivos Apple, ele retorna "Darwin".
Laurent LAPORTE
15

Você pode ter uma ideia geral do sistema operacional que está usando, verificando sys.platform.

Depois de obter essas informações, você pode usá-las para determinar se chamar algo como os.uname()é apropriado para coletar informações mais específicas. Você também pode usar algo como Informações do sistema Python em sistemas operacionais semelhantes ao unix ou pywin32 para Windows.

Também há psutil, se você deseja fazer uma inspeção mais profunda sem querer se preocupar com o sistema operacional.

Nick Bastin
fonte
6

Informações mais detalhadas estão disponíveis no platformmódulo .

Sven Marnach
fonte
O platformmódulo tem alguma vantagem sys.platform? Quando eu gostaria de usar qual abordagem?
Matth
@matth: Você obtém informações mais detalhadas e estruturadas do platformmódulo. Basta clicar no link para obter a documentação.
precisa saber é o seguinte