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])
return
Alternatively 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

- 142,284
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")

- 172,746
-
Not just more consistent with Gtk programming, but also it's a single process: there's no fork-exec going on, so no waste of resources on spawning new process just to send a notification bubble, plus
Popen()
will call shell to run the command, so there's shell process popping up too. – Sergiy Kolodyazhnyy Oct 15 '18 at 23:20 -
@SergiyKolodyazhnyy Using Gtk when you don't need to requires a lot of work. Much simpler to install
python-notify2
orpython3-notify2
. As forPopen()
the newersubprocess
methods (usingpopen
) allow you to turn off the shell which is a security risk at times. I probably could have worded this better but I'm still learning python. – WinEunuuchs2Unix Oct 31 '20 at 19:16 -
1From the link you've posted, you can also find
Gio.Notification
. I think they are separate? When would you use one or the other? – phil294 Jul 17 '23 at 21:20
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+'"')

- 1,137

- 2,170
- 1
- 12
- 10
-
4
-
3What about using
'notify-send "{}" "{}"'.format(title, message)
rather than adding strings? – Stam Kaly Jan 31 '17 at 21:22
import os
mstr='Hello'
os.system('notify-send '+mstr)

- 7,142

- 61
- 1
- 3
-
How do I customize this notification? Like heading, image in notification, etc.? – mehulmpt Mar 25 '15 at 18:34
-
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-send
as 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-send
subprocess approach is already explained in other answers, and py-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-next
as its sole dependency.
notify = desktop_notify.aio.Notify('summary', 'body')
await notify.show()
- fossfreedom's answer covers GTK's
gi
introspection route. But please note he uses a different API than the one mentioned above:- There's the
Gio.Notification
API, from Gio 2.4 onwards, mentioned bypynotify2
- And there's the
Notify
API, from GLib 2.0 onwards, used in @fossfreedom's code snippet.
- There's the

- 20,086
subprocess.Popen(['notify-send', message])
to make the first example work. – lgarzo Feb 29 '12 at 16:52pynotify.init("Test")
andpynotify.Notification(title, message).show()
. By the way I'm „Learning Python The Hard Way”, so I might just overlook something... – lgarzo Feb 29 '12 at 17:07notify2
package in Python 2.7.12 as well so might as well use it on Ubuntu 16.04 as well 18.04 and 20.04 so you don't have to modify your code. – WinEunuuchs2Unix Oct 31 '20 at 19:13