Escribí un código de Python para obtener texto aleatorio en un archivo .txt. Ahora quiero enviar este texto aleatorio al área de notificación mediante el comando 'notificar-enviar'. ¿Como hacemos eso?
Escribí un código de Python para obtener texto aleatorio en un archivo .txt. Ahora quiero enviar este texto aleatorio al área de notificación mediante el comando 'notificar-enviar'. ¿Como hacemos eso?
Respuestas:
Siempre podemos llamar a send-send como un subproceso, por ejemplo, así:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import subprocess
def sendmessage(message):
subprocess.Popen(['notify-send', message])
return
Alternativamente, también podríamos instalar python-notify y llamar a la notificación a través de eso:
import pynotify
def sendmessage(title, message):
pynotify.init("Test")
notice = pynotify.Notification(title, message)
notice.show()
return
Tenga en cuenta que no hay un paquete python3-notify disponible en Ubuntu. Si está utilizando Python 3, deberá usar python3-notify2 . La API para notify2 es la misma: simplemente reemplace pynotify
con notify2
.
pynotify.init("Test")
y pynotify.Notification(title, message).show()
. Por cierto estoy “Learning Python la manera dura”, por lo que podría simplemente pasar por alto algo ...
Si bien puede llamar a notify-send
través de os.system
o subprocess
es posiblemente más coherente con la programación basada en GTK3 para usar la clase de notificación de introspección de objetos .
Un pequeño ejemplo lo mostrará en acción:
from gi.repository import GObject
from gi.repository import Notify
class MyClass(GObject.Object):
def __init__(self):
super(MyClass, self).__init__()
# lets initialise with the application name
Notify.init("myapp_name")
def send_notification(self, title, text, file_path_to_icon=""):
n = Notify.Notification.new(title, text, file_path_to_icon)
n.show()
my = MyClass()
my.send_notification("this is a title", "this is some text")
Popen()
llamará a shell para ejecutar el comando, por lo que hay proceso de shell apareciendo también.
Para responder a la pregunta de Mehul Mohan y proponer la forma más corta de enviar una notificación con las secciones de título y mensaje:
import os
os.system('notify-send "TITLE" "MESSAGE"')
Poner esto en función puede ser un poco confuso debido a las comillas entre comillas
import os
def message(title, message):
os.system('notify-send "'+title+'" "'+message+'"')
'notify-send "{}" "{}"'.format(title, message)
lugar de agregar cadenas?
Para cualquiera que esté mirando esto en +2018, puedo recomendar el paquete notify2 .
Este es un reemplazo de python puro para notify-python, usando python-dbus para comunicarse directamente con el servidor de notificaciones. Es compatible con Python 2 y 3, y sus devoluciones de llamada pueden funcionar con aplicaciones Gtk 3 o Qt 4.
subprocess.Popen(['notify-send', message])
para hacer que el primer ejemplo funcionara.