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

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

4 horas ago

Los récords con asterisco, o la épica del titular sin contexto – El bestiario de los indicadores económicos absurdos (parte 8 y final)

Y llegamos al final de una serie que había programado para ser de tres entradas.…

5 días ago

PSI: Cómo Saber Cuándo tu Modelo de Credit Scoring se ha Degradado

Un modelo de credit scoring no es un artefacto estático. Se construye en un momento…

1 semana ago

Los indicadores que se autocumplen, o cuando medir es modificar – El bestiario de los indicadores económicos absurdos (parte 7)

En las seis entregas anteriores hemos paseado por casi todos los géneros del disparate económico:…

2 semanas ago

Customer Lifetime Value: la fórmula clásica que todo analista debería dominar

El Customer Lifetime Value (CLV) es, probablemente, la métrica más importante que puede calcular una…

2 semanas ago

Analytics Lane lanza la versión 1.4 del laboratorio con nuevas herramientas de conversión y modelos avanzados de CLV

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.4, que…

3 semanas ago

This website uses cookies.