¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Scripting Python en Linux
  3. Para ir incluso más lejos
Extrait - Scripting Python en Linux Desarrolle sus herramientas de sistema
Extractos del libro
Scripting Python en Linux Desarrolle sus herramientas de sistema Volver a la página de compra del libro

Para ir incluso más lejos

Introducción

Este último capítulo permite mencionar los productos diseñados o que giran en torno al lenguaje Python.

Normalmente se trata de módulos o de productos completos que el autor aún no ha tenido la oportunidad de estudiar (lamentablemente los días solo duran 24 horas).

Por esta razón solo repasaremos estas maravillosas herramientas sin dar un ejemplo o procedimiento, sino solo algunos consejos o puntos de entrada.

Twisted

Primera advertencia: investigue en Google con la palabra "python", antes del término "twisted", porque esto significa en español "retorcido, enrevesado, complicado, incluso extraño". De lo contrario, podemos encontrarnos, sin hacerlo a propósito, navegando en sitios normalmente rechazados por los controles parentales.

Aparte de este pequeño inconveniente, esta es una librería maravillosa para crear aplicaciones casi en cualquier protocolo de red.

El principio de esta librería es que todo se basa en eventos, de ahí la definición de "event driven networking library".

En la página twisted del sitio web, hay una serie de ejemplos absolutamente impresionantes; por lo tanto, un simple "echo server " ocupa varias líneas.

Después de instalar la librería twisted (pip install twisted), todo lo que tiene que hacer es copiar/pegar el siguiente ejemplo y ejecutar el script con Python.

En otra sesión, debe lanzar "telnet localhost 1234" para conectarse al echoserver, que repetirá todo lo que escriba en el teclado.

Aquí está el script en cuestión:

# archivo: twisted/t1.py  
  
from twisted.internet import protocol, reactor, endpoints  
  
class Echo(protocol.Protocol):  
   def dataReceived(self, data):  
       self.transport.write(data)  ...

Brython

Sitio web: https://brython.info/

Pero, ¿qué están haciendo el W3C y las altas instancias de la Web? Este es el futuro del HTML y de la Web. Finalmente, un lenguaje simple, fácil de aprender y LEGIBLE en el lado del navegador.

Es simplemente una evolución del lenguaje Python escrita en JavaScript. El objetivo es reemplazar JavaScript por el lenguaje Python.

A continuación se muestra un ejemplo:

<html>  
<head>  
   <script src="/brython.js"></script>  
</head>  
<body onload="brython()">  
  
<script type="text/python">  
from browser import document, alert  
  
# asocia una función al evento "click" del botón  
  
def click(ev):  
    alert(document["zone"].value)  
  
document["echo"].bind("click")  
</script>  
  
<input id="zone"><button id="echo">click !</button>  
</body>  
</html>  

Tenga en cuenta la línea <script type = "text / python"> en este código HTML. Por una vez, nos gustaría que las cosas se movieran muy rápido en el microcosmos de la web.

Sin embargo, un pequeño consejo:...

Fuse

File System in User Space, más conocida con el nombre de FUSE, es una librería que permite a un usuario sin permisos controlar un sistema de archivos virtual como /proc o /sys, por ejemplo.

Python tiene varios módulos que interactúan con esta librería, como python-fuse o pyfuse.

Es cierto que desde hace mucho tiempo queríamos codificar un sistema de archivos que pudiéramos consultar con SQL, solo para ver si eso puede ser útil. ¿Quizás, además, ya se ha hecho?

La sentencia para listar los archivos se convertiría en algo así como:

select * from archivos 

Find podría ser una consulta de este estilo:

select * from archivos where date_modif ≥ 01/01/2020 

Otra idea: también debería ser posible ver una base de datos como un sistema de archivos.

ls                   para listar las tablas  
cat table            para select * from table  
cat table | wc -l    select count(*) from table 

No faltan ideas, sino el tiempo necesario para estudiarlas o realizarlas.

Solo un pequeño consejo antes de comenzar a programar con FUSE: por experiencia, es mejor montar una máquina virtual dedicada si desea probar, los errores de funcionamiento y otros fallos del sistema no son solo una leyenda cuando interactúa con el núcleo.

Ipython y Jupyter

Al principio, existía ipython, un terminal interactivo que le permite introducir código directamente, pero sobre todo que ofrecía una rica historia, de introspección, de la finalización automática y de las sintaxis adicionales. Ipython permitía, entre otras cosas, utilizar librerías gráficas distintas de Tkinter.

Después, ipython propuso una interfaz web y un formato de intercambios: el notebook (bloc de notas en español). Un notebook que mezcla texto, código, datos, imágenes, videos y presentaciones, para formar un conjunto coherente que es fácil de copiar, guardar e intercambiar.

Seguidamente, se ha convertido en una herramienta indispensable en los círculos científicos que manejan una gran cantidad de datos.

Luego el proyecto se extendió a lenguajes distintos a Python, ahora el proyecto se llama Jupyter y permite programar con más de cuarenta lenguajes (Python, Ruby, bash, R, scala, etc.).

Un notebook es ante todo un núcleo que determina el lenguaje utilizado. Está formado por células que pueden ser del tipo:

Código

Para introducir código

Texto Bruto

Para usar con nbconvert (herramienta de conversión de un noetbook en PDF HTML, etc.)

Markdown

Para introducir texto

Título

Para la presentación del notebook

Una célula se puede copiar, pegar, eliminar y transferir de un notebook...

Sphynx

Esta herramienta puede parecer un poco compleja de implementar, pero una vez que la entiendes, se hace bastante comprensible.

¿Por qué mencionar esta herramienta? Gracias a ella, se ha podido desarrollar la generación de documentación corporativa en función de una base de datos que contiene información de terceros (clientes y proveedores).

El objetivo era generar documentación en un formato simple (HTML) y poder gestionar ciertos accesos con autenticación, como la parte de nombres de las máquinas, por ejemplo.

Los desarrolladores realmente hicieron todo lo posible para facilitar el acceso a sus herramientas.

Entonces, para comenzar, debe preparar un entorno ejecutando el comando sphynx-quickstart.

Después de responder a una determinada cantidad de preguntas, la herramienta crea múltiples archivos y directorios, incluido un archivo Makefile.

Es suficiente con ejecutar el comando make html (hay muchos otros) para que la herramienta genere un sitio HTML que puede probar yendo al directorio _build/html y ejecutando el comando python - m http.server.

Seguidamente, la conexión a http://localhost:8000 debe dar algo parecido a:

images/Imagen_23.png

PROYECTO TEST

Posteriormente, para usar esta herramienta, globalmente, debe definir algunas opciones en el archivo conf.py, generar archivos en formato ReStructuredText o RST que pueden estar en varios directorios y subdirectorios, y volver a ejecutar ’make...

Ansible

Ansible es una gran herramienta para ingenieros de sistemas, lo que significa que puede automatizar algunas tareas aún más. Un buen ingeniero de sistemas debe ser algo perezoso, después de todo, hace trabajar a las máquinas. Ansible podría ser la prueba.

Y, sobre todo, solo requiere herramientas estándar como SSH, que se encuentran en todas las distribuciones de Linux.

Ansible le permite administrar configuraciones, construir máquinas virtuales, automatizar tareas en múltiples servidores y más.

Por supuesto, está escrito en Python e incluso usa Jinja como su motor de plantillas.

Uno de los primeros playbooks (término para el script Ansible) que escribimos, permitió actualizar muchas máquinas con un pequeño script responsable de limpiar ciertos directorios.

El script limpieza.sh es simplemente una sucesión de funciones de este estilo:

## Saneamiento de los archivos log de limpieza.sh  
san_log()  
{  
   find ${LOG_DIR} -name *.log -mtime +${NUM_DIAS} \  
       -exec rm {} \; 2>&1  
} 

Pero aún tenía que crear los directorios necesarios para este script, copiarlo y generar la crontab que lo acompaña.

Y todo esto, en bastantes máquinas.

A continuación se muestra el playbook:

##  
## Scripts limpieza.yml  ...

El framework Django

Django es EL framework Python para crear aplicaciones web dinámicas.

Este marco proporciona un conjunto de herramientas y funcionalidades básicas como el acceso a la base de datos, la gestión de las sesiones, el enrutamiento de las URL, la internacionalización y la generación a partir de modelos.

Al usar Django, es posible crear aplicaciones web seguras y fiables muy rápidamente, porque Django proporciona un entorno de desarrollo completo.

El acceso a las bases de datos está estandarizado gracias a un Object RelationnalMapper (ORM). Por lo tanto, es posible comenzar con SQLite y desarrollar en otra base de datos.

Las evoluciones de esquemas se tienen en cuenta con la gestión de las migraciones, al igual que los conjuntos de datos para hacer las pruebas.

Django también es capaz de construir una interfaz de administración automáticamente para las tablas declaradas en el ORM.

Django también integra la noción de proyecto (el sitio web) y de aplicación en un proyecto, la gestión de los usuarios por ejemplo, y si la aplicación está construida de cierta manera, se puede reutilizar en otros proyectos.

Hay muchos módulos de Django listos para usar.

Cuando empiece a descubrir este framework, se puede sorprender por lo que le impone sobre la manera de hacer las cosas. Pero fue creado por desarrolladores para satisfacer las necesidades específicas...

Red SCAPY

Definición: SCAPY es la versión refinada del paquete TCP.

Una vez instalado con pip o con su administrador de paquetes, es obligatorio que sea root para usarlo, pero también tener un conocimiento sólido de los paquetes TCP.

Sin las habilidades necesarias, es difícil juzgar la calidad de Scapy, pero después de haber descubierto la herramienta a través de un artículo en una revista, parecía importante hablar de ello.

Scapy es una herramienta de prueba, un rastreador de redes, pero también una herramienta de ataque para probar la seguridad de su red.

A continuación se muestra un ejemplo de sesión:

  
# /ruta/hacia/scapy  
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().  
WARNING: No route found for IPv6 destination:: (no default route?)  
WARNING: IPython not available. Using standard Python shell instead.  
AutoCompletion, History are disabled.  
                                       
                    aSPY//YASa         
            apyyyyCY//////////YCa       |  
           sY//////YSpcs  scpCY//Pp     | Welcome...

Apache Airflow

Esta herramienta es un descubrimiento reciente en lo que a nosotros respecta y, sin duda, se debería convertir en una herramienta muy popular en breve.

Es una herramienta escrita en Python y perteneciente a Apache Foundation, de ahí el nombre Apache Airflow.

Originalmente escrita por Maxime Beachemin para AirBnb, Airflow es una plataforma creada para administrar flujos de trabajo.

Ejemplo: un archivo se genera en una máquina. Seguidamente debe ser procesado por otra, para luego registrarse en un tercer servidor.

Fácil: cron + shell + ssh/scp y algunos archivos de registros, y listo.

Por otro lado, si multiplicamos este tipo de tareas y los usuarios quieren orquestar o incluso monitorizar el progreso de estas tareas, se puede complicar.

En este contexto interviene Apache Airflow.

Tomemos el caso clásico de ETL (Extract Transform and Load).

Tomamos datos del servidor A, luego los copiamos al servidor B y los integramos en la base de datos para luego archivar el archivo.

Tarea 1: extracción + generación del archivo

Tarea 2: copia en el servidor B el archivo

Tarea 3: integración en la base de datos

Tarea 4: envío un correo electrónico de fin de procesamiento con éxito

La tarea 4 depende de la tarea 3, que depende de la tarea 2, etc.

Este conjunto de tareas se puede programar a una hora fija, pero a veces un usuario puede iniciarlas cuando lo desee.

Además, también puede permitir...

Resumen

Cada sección de este capítulo podría provocar por sí misma un libro completo dedicado, lo que muestra que todavía hay mucho por hacer en nuestro pequeño mundo de la informática.

Si no los conocía, esperamos sobre todo haber agudizado su curiosidad por estos productos, que probablemente se convertirán en imprescindibles.

También muestra que pequeñas gotas forman grandes ríos. Guido Van Rossum ciertamente no pensó en convertirse en un Dictador Benevolente cuando lanzó, por primera vez, su editor para comenzar a codificar el lenguaje Python.

Cuando una herramienta es buena, perdura y el lenguaje Python es una de esas herramientas.