2025-2026
Crea el directorio ~/lagrs/practica02
Escribe un script en Python 3 con el nombre
~/lagrs/practica02/ordena_lista.py. Incluye un comentario
en las primeras líneas tu nombre, apellidos y login.
Este script tendrá una función que:
Recibirá una lista de elementos. Y comprobará que efectivamente su argumento es una lista, mostrando un error en otro caso.
Cada elemento de esta lista será una cadena. Mostrando un error si alguno no lo fuera.
Modificará de forma destructiva la lista, ordenada por longitud de la cadenas. Esto es, primero la cadena más corta, última la cadena más larga.
Escribe un script en Python 3 con el nombre
~/lagrs/practica02/delta_time.py. Incluye un comentario en
las primeras líneas tu nombre, apellidos y login.
El programa tendrá una función que recibirá un número entero que representará un intervalo de tiempo, expresado en segundos.
Esta función devolverá una cadena de texto, en español, describiendo este intervalo de tiempo como años, meses, días, minutos y segundos.
Usa solo funciones vistas en clase. Esto es, haz la división entera de el valor de entrada entre el número de segundos que hay en un año para calcular los años. Toma el resto y divídelo entre el número de segundos en un mes para calcular los meses, etc.
Para simplificar, puedes suponer que un mes tiene 30 días.
El objetivo de esta práctica es que te familiarices con la librería subprocess para acceder a la shell de Linux desde Python.
Escribe un script en Python 3 con el nombre
~/lagrs/practica02/mi_top01.py. Incluye un comentario en
las primeras líneas tu nombre, apellidos y login.
Debe mostrar un listado con el nombre de los procesos de sistema que
más CPU consuman en ese momento. Aunque hay funciones específicas de
Python para obtener información sobre los procesos, usa
subprocess, invocando a top -n 1. En otras
palabras, el programa debe tomar la salida de esta orden, procesarla en
Python, filtrarla y escribir lo filtrado en la salida estándar. En otras
palabras: ofrecer un subconjunto de la información ofrecida por
top -n 1.
El script mostrará los procesos de sistema que ocupen un porcentaje de CPU mayor a 0.0.
En este listado debe aparecer el nombre del proceso, su pid, el
nombre del usuario propietario, el uid del usuario, los nombres de todos
los grupos a los que pertenece el usuario y el porcentaje de CPU
consumido por el proceso. Para obtener la información relativa al
usuario, emplea la orden de shell id.
La información debe aparecer en formato de columnas. Similar a lo
que hace top. Usa format.
No uses regexp.
No incluyas ninguna cabecera con los nombres de los campos.
Sobra decir que es necesario que organices tu programa en funciones. Esto es algo que debes hacer siempre, también con programas cortos como este.
En este ejercicio usarás los enlaces simbólicos para tener diferentes versiones del mismo programa, pero con el mismo nombre. Esto es, tendrás un enlace simbólico que podrá apuntar a diferentes versiones del mismo programa.
Mediante la shell, crea un enlace simbólico llamado
~/lagrs/practica02/mi_top.py
que apunte a
~/lagrs/practica02/mi_top01.py.
Haz una copia de ~/lagrs/practica02/mi_top01.py llamada
~/lagrs/practica02/mi_top02.py. Usando la librería
optparse, añade al menos 2 opciones al script
mi_top02.py. (Sin contar la h de help,
con esta serían al menos 3). Elige las opciones que desees, todas deben
extraer y/o agregar diversa información de top. El
comportamiento que tenía el script en la fase anterior puede ser una de
esas opciones. Antes de implementar las opciones que hayas elegido,
consúltalas con el profesor.
Cuando acabes el script, enlaza mi_top.py a
mi_top02.py.
Prepara ahora una versión de tu práctica anterior con el nombre
~/lagrs/practica02/mi_top03.py, de forma que la práctica
totalidad de las funciones estén en uno o varios módulo.
Los módulos deberán llamarse TULOGIN_xxxxx.py, esto es, empezarán por tu nombre de usuario en el laboratorio (en minúscula) y a continuación, lo que te parezca más adecuado. P..e jperez_shell.py, mgarcia_opciones.py, etc.
Los módulos estarán en el directorio ~/lagrs/lib.
Por tanto, tendrás que incluir este directorio en la variable de entorno
PYTHONPATH. Hazlo en el fichero .bashrc.
Enlaza (desde la shell) mi_top.py a
mi_top03.py.
Antes de hacer nada, el programa comprobará que
Realmente PYTHONPATH existe y incluye
~/lagrs/lib. No importa si contiene otros directorios.
Naturalmente, esto tiene que funcionar para cualquier usuario, esto
es, el programa buscará el directorio ~/lagrs/lib del
usuario que ejecuta este programa (por ejemplo el profesor), no de tu
usuario en particular.
Tus módulos realmente están en su sitio. Usa para ello la
librería os.path. Observa que aquí sí es necesario que el
nombre del módulo comience por tu login, no por el del usuario que
ejecuta este programa (por ejemplo el profesor).
Si alguna de estas comprobaciones falla, el programa lanzará una excepción personalizada.
Si no tienes Telegram, instálalo en tu móvil, en tu tablet o en tu portátil.
Crea un bot de telegram, con el nombre que quieras.
Ponle una foto al perfil del bot.
Escribe un programa con el nombre
~/lagrs/practica02/hola_telegram.py que envíe un mensaje de
tipo hola mundo a tu cliente Telegram y luego entre en un bucle
infinito atendiendo a los mensajes que reciba (de cualquier usuario).
Por cada mensaje recibido, envía una respuesta cualquiera al cliente y
muestra todo en la pantalla del servidor, de forma legible (no el
volcado en bruto del diccionario).
Observa que la fecha y hora del mensaje está en hora Unix, tendrás que pasarlo a otro formato. El que quieras, pero que sea legible por una persona.
Usa format para componer la respuesta. No uses la
concatenación de cadenas con el operador +
El token no estará en el fuente. El programa leerá el token desde
el fichero token.txt, que estará en el directorio actual.
(En este caso, el directorio ~/lagrs/practica02/, pero no
escribas este trayecto, que el script lea el fichero desde el directorio
actual)
Si el fichero con el token no existe o no se puede leer, el programa mostrará un mensaje de error por stderr y morirá. O si lo prefieres, levantará una excepción que describa el problema.
Escribe un pograma llamado
~/lagrs/practica02/top_telegram.py que implemente un bot de
telegram que sea un frontend de tu práctica
mi_top03.py.
Esto es, si el usuario escribe mi_top (o si el usuario
escribe top, como prefieras), el bot devolverá la misma
salida que tu mi_top03.py. Si el usuario añade alguna de
las opciones que has previsto, el bot devolverá el resultado de ejecutar
tu comando con esa opción.
Si el bot recibe un mensaje que no se corresponde con nada de lo aquí descrito, haz que responda de la forma que creas adecuada.
No copies código desde mi_top03.py, importa código
desde el módulo(s) que preparaste en la práctica 2.5.
Ten en cuenta que los mensajes de telegram tienen un tamaño máximo de 4096 caracteres, trata esto como consideres conveniente.
En esta práctica probarás el uso básico de cron. Los puestos físicos del laboratorio no tienen cron instalado, ya que son máquinas que no están siempre encendidas. Haz el ejercicio en uno de los puestos virtuales del laboratorio donde sí hay cron.
Describe brevemente las tablas de cron que usas, en el fichero
~/lagrs/practica02.txt
Comprueba que cron funciona: Programa en el host una tarea que
ejecute cada minuto touch sobre el fichero
/tmp/test_cron_tulogin (donde tulogin es tu login
en el laboratorio). Consulta la fecha de este fichero, si todo está en
orden, borra esta entrada de la tabla de cron
Escribe el script ~/lagrs/practica02/escribe_log en
bash o python que añada la cadena probando cron, junto con la
fecha y la hora, al fichero ~/lagrs/log.txt Como en
cualquier log, debes añadir al final, sin borrar los mensajes
precedentes.
No le pongas extensión al script, ni .sh ni
.py.
Puedes usar el mandato de shell date
Programa una tarea que ejecute el script anterior cada minuto. Cuando veas que funciona, modifica la entrada para que se ejecute a las 9 de la mañana, de lunes a viernes.
El propósito de este ejercicio es programar un script que vigile una serie de directorios, y nos envíe un mensaje de telegram si el número de ficheros que contiene alguno de ellos excede cierto límite. Tambien si el tamaño de alguno de los directorios excede cierto límite.
Escribe un programa con el nombre
~/lagrs/practica03/monitor.py, según la siguiente
especificación:
En las primeras líneas del script definirás las constantes
DIRECTORIOS, MAX_TAMANIO,
MAX_FICHEROS e ID_USUARIO
Ejemplo:
DIRECTORIOS = ["~/lagrs/test01", "~/lagrs/test02"]
MAX_TAMANIO = 2 # Mb
MAX_FICHEROS = 100
ID_USUARIO = 123456789 # Escribe aquí tu id en telegram
Puedes darle a estas constantes los valores que quieras. Te será más cómodo probar con valores menores que los del ejemplo.
Cada vez que se ejecute el script, comprobará que, para cada uno
de los DIRECTORIOS, el tamaño de la suma de su contenido
sea menor o igual que MAX_TAMANIO (en Mb), y que el número
de ficheros es menor o igual que MAX_FICHEROS. En otro
caso, enviará un mensaje de telegram a ID_USUARIO
describiendo todo lo que sucede (esto es, todos los incumplimientos que
haya). Para detectar esto puedes usar las librerías que quieras, o bien
subprocess o bien os, como prefieras. No importa que
solo funcione en Unix.
En la constante DIRECTORIOS se podrá especificar el directorio
home mediante la virgulilla, como en el ejemplo. Pero en
principio python no la reconoce. Tendrás que reemplazar la virgulilla
por el valor del home del usuario. Puedes averiguarlo con el
método os.path.expanduser("~"). Basta con que reconozca
~/, aunque como práctica optativa, puedes hacer que
reconozca también ~jperez/
Si ningún directorio supera sus límites, el script no enviará
ningún mensaje por telegram. A menos que el script sea lanzado con la
opción -f o --force-telegram. En este caso, se
forzará el envío de un mensaje, describiendo el problema o comunicando
que todo está en orden, según corresponda. En otras palabras:
El script siempre comunica los errores.
Si todo está bien y no se usa -f, no envía
nada.
Si todo está bien y se usa -f, se envía un mensaje
indicando que todo está bien.
Para detectar esta opción, usa la librería optparse.
Haz que cron ejecute tu script sin argumentos cada media hora. (Aunque para tus pruebas hazlo cada minuto).
Haz que cron ejecute tu script con la opción -f
todos los días, a la hora que te parezca bien. No importa que se solape
esta ejecución con la ejecución ordinaria (sin -f)