Ho scritto un codice Python per ottenere testo casuale in un file .txt. Ora voglio inviare questo testo a caso nell'area di notifica tramite il comando 'Notify-Send'. Come lo facciamo?
Ho scritto un codice Python per ottenere testo casuale in un file .txt. Ora voglio inviare questo testo a caso nell'area di notifica tramite il comando 'Notify-Send'. Come lo facciamo?
Risposte:
Possiamo sempre chiamare notification-send come sottoprocesso, ad esempio in questo modo:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import subprocess
def sendmessage(message):
subprocess.Popen(['notify-send', message])
return
In alternativa, potremmo anche installare python-notification e chiamare la notifica tramite quella:
import pynotify
def sendmessage(title, message):
pynotify.init("Test")
notice = pynotify.Notification(title, message)
notice.show()
return
Si noti che non esiste alcun pacchetto di notifica Python3 disponibile in Ubuntu. Se stai usando Python 3, dovrai usare python3-notify2 . L'API per notify2 è la stessa: basta sostituirla pynotify
con notify2
.
pynotify.init("Test")
e pynotify.Notification(title, message).show()
. A proposito, sto "Imparando Python The Hard Way", quindi potrei semplicemente trascurare qualcosa ...
Sebbene sia possibile chiamare notify-send
tramite os.system
o subprocess
è probabilmente più coerente con la programmazione basata su GTK3 utilizzare la classe Notify gobject-introspection .
Un piccolo esempio lo mostrerà in azione:
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()
chiamerà shell per eseguire il comando, quindi c'è esplode anche il processo di shell.
Per rispondere alla domanda Mehul Mohan e proporre il modo più breve per inviare una notifica con sezioni titolo e messaggio:
import os
os.system('notify-send "TITLE" "MESSAGE"')
Metterlo in funzione potrebbe essere un po 'confuso a causa delle virgolette tra virgolette
import os
def message(title, message):
os.system('notify-send "'+title+'" "'+message+'"')
'notify-send "{}" "{}"'.format(title, message)
piuttosto che aggiungere stringhe?
Per chiunque lo guardi in +2018, posso consigliare il pacchetto notify2 .
Questa è una sostituzione pure-python per notification-python, usando python-dbus per comunicare direttamente con il server di notifica. È compatibile con Python 2 e 3 e i suoi callback possono funzionare con applicazioni Gtk 3 o Qt 4.
subprocess.Popen(['notify-send', message])
per far funzionare il primo esempio.