¿Cómo verifico el sistema operativo en Python?

148

Quiero verificar el sistema operativo (en la computadora donde se ejecuta el script).

Sé que puedo usarlo os.system('uname -o')en Linux, pero me da un mensaje en la consola y quiero escribir en una variable.

Estará bien si el script puede decir si es Mac, Windows o Linux. ¿Cómo puedo verificarlo?

kolek
fuente

Respuestas:

287

Puedes usar sys.platform:

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

sys.platformtiene una granularidad más fina que sys.name.

Para los valores válidos, consulte la documentación .

Consulte también la respuesta a "¿En qué sistema operativo estoy ejecutando?"

el lobo
fuente
8
Nótese que en cygwin, devuelve "cygwin"no "win32"como alguien podría esperar.
Michał Bentkowski
21
Gracias. ¿Cuál es la diferencia entre linux y linux2?
Tharindu Rusira
1
¿Cuál sería la salida para BSD?
galois
1
Tenga en cuenta que desde Python 3.3, "linux2"ya no es un valor posible de platform(ver los documentos vinculados para corroboración) y, por lo tanto, si solo necesita admitir Python 3.3 y posterior, puede eliminar de forma segura la cláusula `or platform ==" linux2 "` de la Primera condición.
Mark Amery
23

Si desea saber en qué plataforma se encuentra fuera de "Linux", "Windows" o "Darwin" (Mac), sin más precisión, debe usar:

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

La platform.systemfunción utiliza unameinternamente.

Laurent LAPORTE
fuente
1
Me gusta esta solución pero quiero señalar que a partir de los documentos se afirma que le proporcione Linux, Windows, Javao una cadena vacía. devdocs.io/python~3.7/library/platform#platform.system
Brandon Benefield
2
@BrandonBenefield, la enumeración es un ejemplo de posibles valores. En dispositivos Apple, devuelve "Darwin".
Laurent LAPORTE
15

Puede obtener una idea bastante aproximada del sistema operativo que está utilizando al verificar sys.platform.

Una vez que tenga esa información, puede usarla para determinar si llamar a algo así os.uname()es apropiado para recopilar información más específica. También podría usar algo como Python System Information en sistemas operativos tipo UNIX o pywin32 para Windows.

También hay psutil si desea realizar una inspección más profunda sin querer preocuparse por el sistema operativo.

Nick Bastin
fuente
6

Información más detallada está disponible en el platformmódulo .

Sven Marnach
fuente
¿ platformTiene alguna ventaja el módulo sys.platform? ¿Cuándo me gustaría utilizar qué enfoque?
Mt
@matth: Obtiene información más detallada y estructurada del platformmódulo. Simplemente haga clic en el enlace para obtener documentación.
Sven Marnach