2024-2025
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.
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_top.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.
Por si te equivocas en este ejercicio, haz una copia de
~/lagrs/practica02/mi_top.py
en el directorio que
prefieras. Por ejemplo en ~/tmp
(seguramente tendrás que
crearlo)
Renombra la praćtica ~/lagrs/practica02/mi_top.py
como ~/lagrs/practica02/mi_top01.py
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.