Saltar al contenido

[Tip] Detecta la plataforma y sistema operativo con uname en Python

Revisando alguna de mis antiguas entradas me encuentro con una que me resulta interesante: ¿Cómo saber sobre qué plataforma estamos usando dentro de un script de python?. Y bueno, entre que ha llovido bastante desde entonces, y que ahora parece que hay mejores formas de sacar esta misma información (y más, todavía), me he lanzado a sacar una nueva entrada. Vaale, también es para evitar tener que cambiar el subtítulo del blog, que poco estaba publicando sobre python.

He de avisar, que, de entrada, esto sólo he visto que funcione en sistemas operativos de tipo Unix, es decir, Linux y Mac OS, además de otros como FreeBSD o AIX. No parece que esté disponible una llamada similar para sistemas basados en NT, como Windows. Es más, parece que encima da error, por lo que mucho cuidado al diseñar scripts para ser ejecutados en múltiples plataformas.

Salida del comando uname -a

Es bastante frecuente recurrir al comando uname -a para sacar toda la información posible de la plataforma que está corriendo nuestra máquina. Obtenemos información como el sistema operativo, la versión del kernel, el nombre de la máquina, la arquitectura sobre la que funciona… En definitiva, todo bastante detallado.

Si quisiéramos obtener esa misma información en Python, la primera tentativa que se nos pasa por la cabeza puede ser parsear la salida de subprocess.run(["uname","-a"]), pero afortunadamente tenemos una solución mejor.

El módulo os de python viene con una función, os.uname que nos trae la misma información que buscamos, pero formateada de una forma mucho más accesible y comprensible en nuestro script:

Salida de la terminal de la función os.uname()

Y de esta forma podemos imprimir lo que nos interesa, de una forma tremendamente fácil:

>>> import os
>>> uname = os.uname()
>>> print(f"Sysname es {uname.sysname}")
Sysname es Linux
>>> print(f"La release es {uname.release}")
La release es 5.11.0-27-generic
>>> print(f"La versión (compilación) es {uname.version}")
La versión (compilación) es #29~20.04.1-Ubuntu SMP Wed Aug 11 15:58:17 UTC 2021
>>> print(f"Y está corriendo en una plataforma {uname.machine}")
Y está corriendo en una plataforma x86_64

La documentación oficial está disponible en la página del módulo os. Es recomendable consultarla, por si necesitas algo que no haya contemplado yo.

Salida de ejemplo en diferentes plataformas

Puede ser útil saber qué tipo esperar en diferentes plataformas. Aquí dejo algunas que he hecho por mí mismo tanto otras que he encontrado por internet. Iré actualizando el post con otros que vaya encontrando, o con lo que me dejéis en los comentarios!

Linux sobre x86_64

Esta es de mi máquina, corriendo Ubuntu 20.04 y Python 3.8.

>>> import os
>>> os.uname()
posix.uname_result(sysname='Linux', nodename='mortadelo', release='5.11.0-27-generic', version='#29~20.04.1-Ubuntu SMP Wed Aug 11 15:58:17 UTC 2021', machine='x86_64')

Raspberry Pi Pico

Esta la he encontrado por internet en los foros de raspberry, usando micropython:

>>> import os
>>> os.uname()
(sysname='rp2', nodename='rp2', release='1.14.0', version='v1.14 on 2021-02-05 (GNU 9.3.0 MinSizeRel)', machine='Raspberry Pi Pico with RP2040')

Y nada, ¡nos vemos en el próximo tip de python!

Saludos 😉

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.