Я написал код Python для получения случайного текста в файл .txt. Теперь я хочу отправить этот случайный текст в область уведомлений с помощью команды notify-send. Как мы это делаем?
Я написал код Python для получения случайного текста в файл .txt. Теперь я хочу отправить этот случайный текст в область уведомлений с помощью команды notify-send. Как мы это делаем?
Ответы:
Мы всегда можем вызвать notify-send как подпроцесс, например, так:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import subprocess
def sendmessage(message):
subprocess.Popen(['notify-send', message])
return
В качестве альтернативы мы могли бы также установить python-notify и вызвать уведомление через это:
import pynotify
def sendmessage(title, message):
pynotify.init("Test")
notice = pynotify.Notification(title, message)
notice.show()
return
Обратите внимание, что в Ubuntu нет пакета python3-notify. Если вы используете Python 3, вам нужно использовать python3-notify2 . API для notify2 такой же: просто замените pynotify
на notify2
.
pynotify.init("Test")
а pynotify.Notification(title, message).show()
. Кстати, я «Изучаю Python трудный путь», так что я мог бы просто что-то упустить из виду ...
Хотя вы можете вызывать с notify-send
помощью os.system
или, subprocess
возможно, более совместимо с программированием на основе GTK3 использовать класс Notify gobject-introspection .
Небольшой пример покажет это в действии:
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()
вызовет shell для запуска команды, так что процесс оболочки тоже выскакивает.
Чтобы ответить на вопрос Мехула Мохана, а также предложить кратчайший способ отправить уведомление с разделами заголовка и сообщения:
import os
os.system('notify-send "TITLE" "MESSAGE"')
Включение этого в функцию может быть немного запутанным из-за кавычек в кавычках
import os
def message(title, message):
os.system('notify-send "'+title+'" "'+message+'"')
'notify-send "{}" "{}"'.format(title, message)
а не добавления строк?
Для тех, кто смотрит на это в +2018, я могу порекомендовать пакет notify2 .
Это чистая замена python для notify-python, использующая python-dbus для прямой связи с сервером уведомлений. Он совместим с Python 2 и 3, а его обратные вызовы могут работать с приложениями Gtk 3 или Qt 4.
subprocess.Popen(['notify-send', message])
чтобы первый пример работал.