martes, 27 de octubre de 2015

Por dónde se mueve la serpiente

Desde hace poco, estoy flirteando un poco con Python, y entre otras pruebas que estoy haciendo, tengo un programa que quiero que me funcione tanto en Linux como en Windows.

¿Cómo hacer que el programa sepa si está en una u otra plataforma? (Por ejemplo, para tratar con las rutas de ficheros, o para buscar determinados directorios de sistema que tienen nombres predefinidos...)

En realidad, para esas dos cosas que he dicho, debería usar variables del sistema o constantes predefinidas (separador de directorios, directorio del usuario... que tengo pendiente de investigar), pero es posible que aún y así todavía quiera seguir sabiendo cómo conocer en qué sistema operativo se está ejecutando el programa.

Simplemente hay que importar el módulo (librería) platform, e invocar el método system, que devolverá la cadena 'Windows' o 'Linux'.

Pues ya está. Aquí el listado:

 1 import platform
 2 print("Mostrar información sobre el ordenador")
 3 
 4 # Windows o Linux?
 5 if platform.system() == "Windows":
 6    print("En Windows")
 7    raiz = 'c:\\'
 8 elif platform.system() == "Linux":
 9    print("En Linux")
10    raiz = '/'
11    
12 print('------------------------------------------------------------------------')
13 print(platform.uname())
14 print('------------------------------------------------------------------------')
15 print('Arquitectura:')
16 print(platform.architecture())
17 print('Implementación: ' + platform.python_implementation())
18 print('------------------------------------------------------------------------')

Listado 1: Diferenciar entre Windows y Linux con platform.system()

Como podéis ver, hay otros métodos interesantes: uname, architecture y python_implementation, que nos pueden dar información que puede que necesitemos en algún caso. Aunque si queremos maximizar la portabilidad de nuestros programas, deberíamos usar esto lo menos posible, para no atarnos en demasía a una plataforma específica. Que sí, que luego siempre se acaba migrando, aunque uno no quiera. Y las dependencias de la plataforma son un lastre.

La llamada a uname devuelve un array con bastante información (contiene, entre otras, el tipo de sistema, como lo devuelve system).

La salida en Ubuntu la podéis ver aquí:



Y aquí en Windows 7:


Por último, avisar de que este código está hecho para Python 3, así que no olvidéis poner en la primera línea del archivo la ruta del ejecutable de python3. También os dejo aquí cómo indicar que el encoding del archivo es UTF-8, cosa que os será útil si trabajáis con eñes, tildes y otras 'cosas raras'. Simplemente hay que poner en las dos primeras líneas esto:

#!/usr/bin/python3
# -*- encoding: utf-8 -*-



No hay comentarios:

Publicar un comentario