Ejecutando comandos desde Python

Anteriormente publiqué una introducción a Python, antes de continuar con el tutorial, dejo aquí un pequeño ejemplo de cómo se pueden realizar llamadas al shell desde Python. En concreto vamos a ver una llamada al comando ls:

#!/usr/bin/python
#-*- encoding:utf-8 -*-
#Es muy importante que la declaración de la codificación 
#de caracteres sea la primera línea antes del script.

#A.B: Comandos de sistema en Python:

#Importamos el módulo que contiene la función de llamada al sistema:
from subprocess import call

#La función call permite ejecutar el comando. Es necesario poner el
#flag de shell a True (segundo parámetro), en este caso hemos hecho
#una llamada al comando ls (con archivos ocultos) y lo hemos entubado
#en un 'more' para que pagine el resultado.
call("ls -la| more", shell=True)

Como se puede observar es bastante sencillo ejecutar comandos de shell desde Python. Para probarlo creamos un archivo nuevo "comando.py" que contenga el código anterior y lo guardamos. Luego tenemos que darle permisos de ejecución. Para no complicarnos un "chmod 777 comando.py" es suficiente. Y por último podemos ejecutarlo desde la línea de comandos con "./comando.py".


A veces los programas shell son un poco lentos en ejecución porque requieren del uso varios comandos y tuberías para realizar operaciones relativamente complejas. El comando "ls" que acabamos de ejecutar desde Python en bash podemos implementarlo directamente en Python. Probablemente los desarrollos de funcionalidades en Python sean más eficientes generalmente que los programas desarrollados en shell sobre todo en lo relacionado con manejo de ficheros, E/S, parseos de ficheros. Pues en shell script los programas se apoyan demasiado en concatenar la salida de unos comandos con otros mediante tuberías. En un ejemplo muy corto y sencillo vamos a ver cómo se ejecutaría el comando "ls" desde Python sin la ayuda del shell. Por simplicidad en el ejemplo evitamos la tubería con more:

#!/usr/bin/python
#-*- encoding:utf-8 -*-
#Es muy importante que la declaración de la codificación 
#de caracteres sea la primera línea antes del script.

#A.B: Implementación comando ls en Python

#Importamos el módulo "os" (http://docs.python.org/library/os.html) que
#permite operar con el sistema de ficheros
import os

#Obtenemos la lista de ficheros, os.getcwd() nos devuelve el directorio 
#actual y os.listdir(directorio) nos da la lista de ficheros del 
#directorio pasado como parámetro:
ficheros = os.listdir(os.getcwd())
 
#Por último, hacemos un bucle que recorre la lista de ficheros y los 
#imprimimos por pantalla: 
for f in ficheros:
 print f 
 


Eso es todo, queda en el tintero comprobar con comandos más avanzados el tiempo que tarda bash y el tiempo que tardaría Python en ejecutar la misma funcionalidad. En próximas entradas continuaré con el Tutorial de Python.
Share:
spacer

No hay comentarios:

Publicar un comentario