Як надсилати текстові повідомлення на бульбашки сповіщень?


38

Я написав код python для отримання випадкового тексту у файл .txt. Тепер я хочу надіслати цей випадковий текст у область сповіщення за допомогою команди "notify-send". Як ми це робимо?

Відповіді:


63

Ми завжди можемо викликати сповіщення-відправлення як підпроцес, наприклад так:

#!/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. Якщо ви використовуєте Python 3, вам потрібно буде використовувати python3-notify2 . API для notify2 такий же: просто замініть pynotifyна notify2.


1
Мені довелося скористатися, subprocess.Popen(['notify-send', message])щоб зробити перший приклад роботи.
lgarzo

Другий а pynotify.init("Test")і pynotify.Notification(title, message).show(). До речі, я „Навчаю Пітона важким шляхом”, тож я просто можу щось пропустити…
lgarzo

Так шкода за це. Я не зміг перевірити це раніше на своїй коробці на роботі - це моє погано. Редаговано відсутні біти в.
Таккат

10

python3

У той час як ви можете зателефонувати notify-sendчерез os.systemабо subprocessце, можливо, більше відповідає програмуванню на базі GTK3 для використання класу самоаналізу Gobject-самовизначення .

Невеликий приклад покаже це в дії:

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")

Не просто більше відповідає програмуванню Gtk, але також це єдиний процес: немає fork-exec, тому не витрачайте ресурси на нерестування нового процесу просто для надсилання міхура сповіщень, плюс Popen()буде викликати оболонку для запуску команди, тому є Процес оболонки спливає теж.
Сергій Колодяжний


5

Щоб відповісти на запитання Мехула Мохана, а також запропонувати найкоротший спосіб надіслати повідомлення з розділами заголовка та повідомлення:

import os
os.system('notify-send "TITLE" "MESSAGE"')

Введення цього функції може бути дещо заплутаним через наведення лапок

import os
def message(title, message):
  os.system('notify-send "'+title+'" "'+message+'"')

4
Ви можете запропонувати змінити цю публікацію.
муру

2
Що з використанням, 'notify-send "{}" "{}"'.format(title, message)а не додаванням рядків?
Стам Кали

5

Для всіх, хто дивиться на це у +2018, я можу рекомендувати пакет notify2 .

Це заміна чистого пітона для notify-python, використовуючи python-dbus для прямого спілкування з сервером сповіщень. Він сумісний з Python 2 і 3, і його зворотні дзвінки можуть працювати з програмами Gtk 3 або Qt 4.


4

Ви повинні використовувати пакет notify2 , він замінює python-notify. Використовуйте його як слід.

pip install notify2

І код:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.