Python

Enviar notificaciones de escritorio con Python

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.

Crear una notificación con plyer

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.

Notificación básica en Windows

Opciones avanzadas con notification

La 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ón
  • message: Mensaje de la notificación
  • app_name: nombre de la aplicación que inicia esta notificación
  • app_icon: icono que se mostrará junto con el mensaje
  • timeout: tiempo para mostrar el mensaje, el valor predeterminado en 10
  • ticker: texto que se mostrará en la barra de estado cuando llegue la notificación
  • toast: mensaje simple en lugar de notificación completa

Ademá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.

Notificación con iconos en Windows

Notificaciones en macOS

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.

Notificación básica en Mac

Notificaciones en varias plataformas

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')

Conclusiones

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

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Cómo Proyectar Cuándo Alcanzarás la Independencia Financiera

La independencia financiera es el punto en el que tus inversiones generan suficientes rendimientos para…

1 día ago

Cómo Elegir el Test de Hipótesis Correcto para tus Datos

Tienes dos grupos de datos y quieres saber si son estadísticamente distintos. O tienes una…

6 días ago

Tuplas vs Listas en Python: parecen lo mismo, pero no

A primera vista, tuplas y listas son casi idénticas. Ambas guardan colecciones ordenadas de elementos.…

1 semana ago

Qué significa realmente “calidad de datos”

"Nuestros datos no tienen buena calidad." Escuchas esto constantemente en reuniones. El problema es que…

2 semanas ago

Cómo Detectar Pseudo-IDs y Data Leakage en el Constructor de Scorecards

El artículo Data Leakage en Credit Scoring explicó por qué este es el error más…

2 semanas ago

Cómo Verificar la Normalidad de tus Datos antes de un Test Estadístico

Antes de aplicar muchos tests estadísticos clásicos (el t-test, el ANOVA, la regresión lineal) aparece…

3 semanas ago

This website uses cookies.