Wie sende ich SMS an die Benachrichtigungsblasen?

38

Ich habe einen Python-Code geschrieben, um zufälligen Text in eine .txt-Datei zu bekommen. Jetzt möchte ich diesen zufälligen Text über den Befehl 'notify-send' in den Benachrichtigungsbereich senden. Wie machen wir das?

Anuroop Kuppam
quelle

Antworten:

63

Wir können notify-send immer als Unterprozess aufrufen , zB so:

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

import subprocess

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

Alternativ können wir auch python-notify installieren und die Benachrichtigung folgendermaßen aufrufen:

import pynotify

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

Beachten Sie, dass in Ubuntu kein python3-notify-Paket verfügbar ist. Wenn Sie Python 3 verwenden, müssen Sie python3-notify2 verwenden . Die API für notify2 ist das gleiche: ersetzen Sie einfach pynotifymit notify2.

Takkat
quelle
1
Ich musste verwenden subprocess.Popen(['notify-send', message]), um das erste Beispiel zum Laufen zu bringen.
LGARZO
Der zweite a pynotify.init("Test")und pynotify.Notification(title, message).show(). Übrigens, ich
lerne
Entschuldigung. Ich konnte dies früher nicht an meiner Box bei der Arbeit testen - meine schlechte. Bearbeitet die fehlenden Bits in.
Takkat
10

python3

Während Sie anrufen können notify-sendüber os.systemoder subprocesses ist wohl mehr im Einklang mit GTK3 basierter Programmierung zu verwenden , die dieser Artikel gobject-Selbstbeobachtung Klasse.

Ein kleines Beispiel zeigt dies in Aktion:

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
quelle
Dies ist nicht nur konsistenter mit der Gtk-Programmierung, sondern auch ein einzelner Prozess: Es findet kein Fork-Exec statt, sodass keine Ressourcenverschwendung beim Starten eines neuen Prozesses entsteht, nur um eine Benachrichtigungsblase zu senden. Außerdem Popen()wird Shell aufgerufen, um den Befehl auszuführen Shell-Prozess auftauchen zu.
Sergiy Kolodyazhnyy
6
import os
mstr='Hello'
os.system('notify-send '+mstr)
Syed "sonnig" I. Tauhidi
quelle
Wie passe ich diese Benachrichtigung an? Wie Überschrift, Bild in Benachrichtigung, etc.?
Mehulmpt
1
Diese Version ist anfällig für die Ausführung beliebiger Befehle.
Steve
5

Um die Frage von Mehul Mohan zu beantworten und den kürzesten Weg vorzuschlagen, eine Benachrichtigung mit Titel- und Nachrichtenabschnitten zu versenden:

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

Das Einfügen dieser Funktion kann aufgrund von Anführungszeichen in Anführungszeichen etwas verwirrend sein

import os
def message(title, message):
  os.system('notify-send "'+title+'" "'+message+'"')
Silber Ringvee
quelle
4
Sie können diesem Beitrag eine Bearbeitung
Muru
2
Was ist mit der Verwendung 'notify-send "{}" "{}"'.format(title, message)von Zeichenfolgen anstatt sie hinzuzufügen?
Stam Kaly
4

Für alle, die dies in +2018 betrachten, kann ich das Paket notify2 empfehlen .

Dies ist ein reiner Python-Ersatz für notify-python, der python-dbus verwendet, um direkt mit dem Benachrichtigungsserver zu kommunizieren. Es ist kompatibel mit Python 2 und 3 und seine Rückrufe können mit Gtk 3- oder Qt 4-Anwendungen verwendet werden.

Oberster Barbar
quelle
3

Sie sollten das Paket notify2 verwenden, es ist ein Ersatz für python-notify. Verwenden Sie es wie folgt.

pip install notify2

Und der Code:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
jcofta
quelle