2.1. Python como lenguaje de scripts

Habitualmente sobre todo en entornos *IX se suelen utilizar scripts de shell con cometidos muy diversos, como el arranque del sistema, el arranque del modo gráfico, automatización de ciertas tareas, tratamiento de archivos de texto, etc. En entornos Microsoft estos scripts equivalen a los antiguos *.bat, aunque la potencia de estos es mucho menor.

Estos scripts están compuestos por una serie de comandos del sistema que se ejecutan secuencialmente. Son sencillos de crear pero tienen una potencia limitada. Un usuario hábil lograría mediante el uso de grep, cut automatizar algunas tareas sobre archivos de texto, pero pronto se encontraría con limitaciones, se le quedarían pequeños. Veamos un ejemplo:

Ejemplo 2-1. Un ejemplo del uso de scripts para entornos UNIX

Un usuario tiene un directorio llamado $HOME/pascal/ donde trabaja a diario. Cada día cuando termina su jornada, desea hacer una copia de seguridad de su trabajo en un disquete. Tiene decenas de ficheros fuente y desea que cada vez sólo guarde en el disquete los archivos que han sufrido cambios respecto al día anterior.

Este es un ejemplo en que los scripts de shell podrían ser insuficientes (al menos yo no conozco forma de hacerlo). Tampoco parece que merezca mucho la pena realizar un programa en C o Pascal para solucionar este problema, ya que puede resultar tedioso y complicado cuando en realidad el problema es sencillo.

Sugerencia

Si el problema es muy sencillo, es más rápido (si se tienen conocimientos suficientes) escribir scripts de shell que scripts en algún lenguaje concreto.

Aquí es donde entran en juego los lenguajes de scripts como Python, Perl o Tcl. Si bien no son los más adecuados para programas grandes (el carecer de control estático de tipos es un arma de doble filo) para programas medianos o pequeños que impliquen el uso de archivos de texto y necesiten interactuar de manera fluida con el SO son los más adecuados.

Los lenguajes de scripts se conocen con el nombre de middleware ya que son capaces de gestionar transferencias de datos entre aplicaciones o entre aplicaciones y el SO. Habitualmente se pueden ampliar mediante plugins o módulos (en el caso de Python) e incluso pueden ser empotrados en otras aplicaciones.