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?



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?"


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.


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.


6

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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.