Jak wysyłać wiadomości tekstowe na bąbelki powiadomień?

38

Napisałem kod Pythona do pobierania losowego tekstu do pliku .txt. Teraz chcę wysłać ten losowy tekst do obszaru powiadomień za pomocą polecenia „powiadom-wyślij”. Jak to zrobimy?

Anuroop Kuppam
źródło

Odpowiedzi:

63

Zawsze możemy zadzwonić do send-send jako podproces, np. W ten sposób:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import subprocess

def sendmessage(message):
    subprocess.Popen(['notify-send', message])
    return

Alternatywnie możemy również zainstalować python-powiadomienie i wywołać powiadomienie poprzez:

import pynotify

def sendmessage(title, message):
    pynotify.init("Test")
    notice = pynotify.Notification(title, message)
    notice.show()
    return

Zauważ, że w Ubuntu nie ma dostępnego pakietu powiadomień python3. Jeśli używasz Python 3, będziesz musiał użyć python3-powiadomienie2 . API dla notify2 jest taka sama: po prostu zastąpić pynotifyz notify2.

Takkat
źródło
1
Musiałem użyć, subprocess.Popen(['notify-send', message])aby pierwszy przykład zadziałał.
lgarzo
Drugi a pynotify.init("Test")i pynotify.Notification(title, message).show(). Nawiasem mówiąc, „uczę się Python The Hard Way”, więc mogę po prostu coś przeoczyć ...
lgarzo
Przykro mi z tego powodu. Nie byłem w stanie przetestować tego wcześniej na moim komputerze w pracy - mój zły.
Edytowałem
10

python3

Podczas gdy możesz dzwonić notify-sendprzez os.systemlub subprocessjest to prawdopodobnie bardziej spójne z programowaniem opartym na GTK3, aby korzystać z klasy gobject-introspection Notify .

Mały przykład pokaże to w akcji:

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")
fossfreedom
źródło
Nie tylko jest bardziej spójny z programowaniem Gtk, ale także jest to pojedynczy proces: nie ma tu działania fork-exec, więc nie marnuje się zasobów na spawnowanie nowego procesu tylko po to, aby wysłać bąbelek powiadomień, a ponadto Popen()wywoła powłokę, aby uruchomić polecenie, więc jest wyskakuje również proces powłoki.
Sergiy Kolodyazhnyy
6
import os
mstr='Hello'
os.system('notify-send '+mstr)
Syed „sunny” I. Tauhidi
źródło
Jak dostosować to powiadomienie? Jak nagłówek, obraz w powiadomieniu itp.?
mehulmpt,
1
Ta wersja jest podatna na wykonanie dowolnego polecenia.
Steve,
5

Aby odpowiedzieć na pytanie Mehula Mohana, a także zaproponować najkrótszy sposób przekazania powiadomienia z sekcjami tytułu i wiadomości:

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

Włączenie tej funkcji może być nieco mylące ze względu na cytaty w cudzysłowach

import os
def message(title, message):
  os.system('notify-send "'+title+'" "'+message+'"')
Srebrny Ringvee
źródło
4
Możesz zasugerować edycję tego wpisu.
muru
2
Co powiesz na używanie 'notify-send "{}" "{}"'.format(title, message)zamiast dodawania ciągów?
Stam Kaly
4

Dla każdego, kto patrzy na to w +2018, mogę polecić pakiet powiadomienie2 .

Jest to czysto-pythonowy zamiennik dla powiadomienia-python, wykorzystujący python-dbus do bezpośredniej komunikacji z serwerem powiadomień. Jest kompatybilny z Python 2 i 3, a jego wywołania zwrotne mogą współpracować z aplikacjami Gtk 3 lub Qt 4.

Najwyższy Barbarzyńca
źródło
3

Powinieneś użyć pakietu replace2, który zastępuje python-powiadomienie. Użyj go w następujący sposób.

pip install notify2

I kod:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
jcofta
źródło