I wrote a python code for getting random text into a .txt file. Now I want to send this random text into notification area via 'notify-send' command. How do we do that?
7 Answers
We can always call notify-send as a subprocess, e.g like that:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import subprocess
def sendmessage(message): subprocess.Popen(['notify-send', message]) returnAlternatively we could also install python-notify2 or python3-notify2 and call the notification through that:
import notify2
def sendmessage(title, message): notify2.init("Test") notice = notify2.Notification(title, message) notice.show() return 5 python3
Whilst you can call notify-send via os.system or subprocess it is arguably more consistent with GTK3 based programming to use the Notify gobject-introspection class.
A small example will show this in action:
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") 2 To answer Mehul Mohan question as well as propose the shortest way to push a notification with title and message sections:
import os
os.system('notify-send "TITLE" "MESSAGE"')Putting this in function might be a bit confusing due to quotes in quotes
import os
def message(title, message): os.system('notify-send "'+title+'" "'+message+'"') 2 You should use notify2 package, it is a replacement for python-notify. Use it as followed.
pip install notify2And the code:
import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show() import os
mstr='Hello'
os.system('notify-send '+mstr) 3 For anyone looking at this in +2018, I can recommend the notify2 package.
This is a pure-python replacement for notify-python, using python-dbus to communicate with the notifications server directly. It’s compatible with Python 2 and 3, and its callbacks can work with Gtk 3 or Qt 4 applications.
PyNotify2, suggested by many answers, considers itself as deprecated as of late 2020:
notify2 is - or was - a package to display desktop notifications on Linux. Those are the little bubbles which tell a user about e.g. new emails.
notify2 is deprecated. Here are some alternatives:
- desktop_notify is a newer module doing essentially the same thing.
- If you’re writing a GTK application, you may want to use GNotification (intro, Python API).
- For simple cases, you can run
notify-sendas a subprocess. The py-notifier package provides a simple Python API around this, and can also display notifications on Windows.
So, given the above suggestions:
- The
notify-sendsubprocess approach is already explained in other answers, andpy-notifier can simplify that, with an added bonus of working on Windows platforms using win10toast, but also with all the drawbacks of a subprocess call under the hood:
from pynotifier import Notification
Notification( title='Notification Title', description='Notification Description', icon_path='path/to/image/file/icon.png', duration=5, urgency=Notification.URGENCY_CRITICAL
).send()- desktop_notify seems to use DBus directly, just like
PyNotify2, and hasdbus-nextas its sole dependency.
notify = desktop_notify.aio.Notify('summary', 'body')
await notify.show()- fossfreedom's answer covers GTK's
giintrospection route. But please note he uses a different API than the one mentioned above:- There's the
Gio.NotificationAPI, from Gio 2.4 onwards, mentioned bypynotify2 - And there's the
NotifyAPI, from GLib 2.0 onwards, used in @fossfreedom's code snippet.
- There's the