Instantly share code, notes, and snippets.

Embed
What would you like to do?
Mountain Lion Notification Center via Python
import Foundation
import objc
import AppKit
import sys
NSUserNotification = objc.lookUpClass('NSUserNotification')
NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')
def notify(title, subtitle, info_text, delay=0, sound=False, userInfo={}):
notification = NSUserNotification.alloc().init()
notification.setTitle_(title)
notification.setSubtitle_(subtitle)
notification.setInformativeText_(info_text)
notification.setUserInfo_(userInfo)
if sound:
notification.setSoundName_("NSUserNotificationDefaultSoundName")
notification.setDeliveryDate_(Foundation.NSDate.dateWithTimeInterval_sinceDate_(delay, Foundation.NSDate.date()))
NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
notify("Test message", "Subtitle", "This message should appear instantly, with a sound", sound=True)
sys.stdout.write("Notification sent...\n")
@MrBjorn

This comment has been minimized.

Copy link

MrBjorn commented Aug 26, 2014

Hi,

I tried this, but it didn't show any notification. I am on 10.9.4, anything that have changed maybe?

Cheers

@karlbunch

This comment has been minimized.

Copy link

karlbunch commented Oct 5, 2014

@MrBjorn I was able to make it work on 10.9.5 by making it a proper python script:

$ cat > ~/tmp/n
#!/usr/bin/python
{cut-paste above here}
{Control-D}
$ chmod a+x ~/tmp/n
$ ~/tmp/n

Worked right out of the gate!

@baliw Thanks this saved me a lot of time digging into OSX Docs to figure out the objects and call structure.

@meoow

This comment has been minimized.

Copy link

meoow commented Oct 12, 2014

Is there a way to custom the icon showing in notification?
The message does not wrap but cut off if longer than the width, any workaround?

@WardsParadox

This comment has been minimized.

Copy link

WardsParadox commented Oct 17, 2014

Icon is dependent on the script icon. Just found that out myself.

@muammar

This comment has been minimized.

Copy link

muammar commented Sep 25, 2016

I am getting this error:

  % python3 mlnotifications.py                                                                                                                         !10244
Traceback (most recent call last):
  File "mlnotifications.py", line 1, in <module>
    import Foundation
ImportError: No module named 'Foundation'

Should I install pyobjc?.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment