Al lanzar una tarea pesada, como puede ser una simulación Montecarlo, es habitual trabajar en otra cosa. No es productivo esperar sin hacer nada a la espera de que finalice la tarea. Por este motivo, para evitar estar pendiente de la finalización, puede ser interesante que el propio Python envíe una notificación al escritorio al terminar. Facilitando el uso de los resultados en cuanto se obtenga. Para enviar notificaciones de escritorio con Python se puede usar en Windows y Linux el paquete plyer, mientras que en Mac es necesario algo más de trabajo.
Uno de los paquetes de Python más utilizados para la creación de notificaciones es plyer. Un paquete que, como es habitual, se puede instalar mediante el uso de pip.
pip install plyer
Tras la instalación del paquete se puede importar la función notification del mismo para crear notificaciones. De este modo, para crear una notificación básica solamente hay que escribir un código como el siguiente.
from plyer import notification
notification.notify(
title='Fin de simulación',
message='La simulación ha finalizado') Lo que, en Windows, genera una notificación como la que se muestra a continuación.
notificationLa función notification del paquete plyer tiene los siguientes parámetros con los que se puede modificar el comportamiento de las notificaciones.
title: Título de la notificaciónmessage: Mensaje de la notificaciónapp_name: nombre de la aplicación que inicia esta notificaciónapp_icon: icono que se mostrará junto con el mensajetimeout: tiempo para mostrar el mensaje, el valor predeterminado en 10ticker: texto que se mostrará en la barra de estado cuando llegue la notificacióntoast: mensaje simple en lugar de notificación completaAdemás de los parámetros title y message quizás la más interesantes sea app_icon. Propiedad con la que es posible cambiar el icono de la notificación, facilitando la identificación de las lanzadas por nuestro programa. Para lo que solamente se necesita un archivo en formato ico cuya ruta se debe indicar mediante este parámetro. Lo que se muestra en el siguiente ejemplo.
notification.notify(
title='Fin de simulación',
message='La simulación ha finalizado',
app_icon='python.ico',
timeout = 15) Consiguiendo la siguiente notificación.
En el caso lanzar el código anterior en macOS nos encontraremos con un error similar a AttributeError: 'NoneType' object has no attribute 'setDelegate_', en lugar de la notificación. Esto es porque actualmente no se puede usar plyer en macOS. Aunque esto es un problema que se puede solucionar fácilmente ya que en macOS es posible enviar notificaciones. A lo que se puede acceder mediante la función os.system().
import os
title = 'Fin de simulación'
message = 'La simulación ha finalizado'
os.system("osascript -e 'display notification \"{}\" with title \"{}\"'".format(message, title)) Obtenido el siguiente mensaje.
Puede ser que a la hora de escribir el código no sepamos el sistema operativo donde se va a ejecutar. Afortunadamente es posible preguntar a Python cuál es la platarforma en la que estamos trabajando mediante el uso de platform.system(). En el caso de estar en macOS devolverá 'Darwin', por lo que la siguiente función es válida tanto en Windows como en macOS.
import os
import platform
from plyer import notification
def notify(message, title):
if platform.system() == 'Darwin':
os.system("osascript -e 'display notification \"{}\" with title \"{}\"'".format(message, title))
else:
notification.notify(
title=title,
message=message,
app_icon='python.ico')
notify('La simulación ha finalizado', 'Fin de simulación') Hoy hemos visto cómo se puede hacer para enviar notificaciones de escritorio con Python tanto en Windows como en macOS. Una herramienta que puede ser de utilidad cuando tengamos scripts que requieran tiempo para ejecutarse y no deseemos estar pendiente de que estos terminan.
Imagen de Picography en Pixabay
En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…
En la serie Creación de una API REST con Express y TypeScript construimos una API…
Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…
En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…
Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…
En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…
This website uses cookies.