Eu escrevi um código python para obter texto aleatório em um arquivo .txt. Agora, quero enviar esse texto aleatório para a área de notificação via comando 'notify-send'. Como fazemos isso?
Eu escrevi um código python para obter texto aleatório em um arquivo .txt. Agora, quero enviar esse texto aleatório para a área de notificação via comando 'notify-send'. Como fazemos isso?
Respostas:
Sempre podemos chamar notificar-enviar como um subprocesso, por exemplo:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import subprocess
def sendmessage(message):
subprocess.Popen(['notify-send', message])
return
Como alternativa, também podemos instalar o python-notify e chamar a notificação por meio disso:
import pynotify
def sendmessage(title, message):
pynotify.init("Test")
notice = pynotify.Notification(title, message)
notice.show()
return
Observe que não há nenhum pacote python3-notify disponível no Ubuntu. Se você estiver usando o Python 3, precisará usar o python3-notify2 . A API para notify2 é a mesma: basta substituir pynotify
por notify2
.
pynotify.init("Test")
e pynotify.Notification(title, message).show()
. Pelo jeito que eu sou “Aprender Python The Hard Way”, então eu só poderia esquecer alguma coisa ...
Embora você possa ligar notify-send
via os.system
ou subprocess
seja indiscutivelmente mais consistente com a programação baseada em GTK3, use a classe Notify gobject-introspection .
Um pequeno exemplo mostrará isso em ação:
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()
chamar o shell para executar o comando. processo shell aparecendo também.
Para responder à pergunta de Mehul Mohan e propor a maneira mais curta de enviar uma notificação com as seções de título e mensagem:
import os
os.system('notify-send "TITLE" "MESSAGE"')
Colocar isso em função pode ser um pouco confuso devido a aspas entre aspas
import os
def message(title, message):
os.system('notify-send "'+title+'" "'+message+'"')
'notify-send "{}" "{}"'.format(title, message)
vez de adicionar strings?
Para quem vê isso em +2018, posso recomendar o pacote notify2 .
Esta é uma substituição python pura para notify-python, usando python-dbus para se comunicar diretamente com o servidor de notificações. É compatível com Python 2 e 3, e seus retornos de chamada podem funcionar com aplicativos Gtk 3 ou Qt 4.
subprocess.Popen(['notify-send', message])
para fazer o primeiro exemplo funcionar.