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?
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?
Odpowiedzi:
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ć pynotify
z notify2
.
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ć ...
Podczas gdy możesz dzwonić notify-send
przez os.system
lub subprocess
jest 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")
Popen()
wywoła powłokę, aby uruchomić polecenie, więc jest wyskakuje również proces powłoki.
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+'"')
'notify-send "{}" "{}"'.format(title, message)
zamiast dodawania ciągów?
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.
subprocess.Popen(['notify-send', message])
aby pierwszy przykład zadziałał.