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



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


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.


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.


6

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


¿ 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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.