[Pythonmac-SIG] [py-appscript] is System Events sleeping ?
Karsten Wolf
karstenwo at googlemail.com
Wed Feb 2 01:22:51 CET 2011
Am 30.01.2011 um 16:12 schrieb Fandekasp:
> Ok so the only solution for me is to map a sleep key which will
> call my
> program and plan some tasks (threading.Timer), and my program will
> force my
> system to sleep after that.
If you're willing to dive into pyobjc, NSWorkspace may help you.
Ask for a NSWorkspaceWillSleepNotification and you get ca. 30 seconds
to finish your pre-sleep duties, after that, well you're asleep.
This is a modified script from the pyobjc examples and works on
python 2.7 with pyobjc 1.4 on OSX 10.4. YMMV.
-karsten
P.S.: There are many more notifications. Application launch/quit;
volumes mount/unmount; sleep, wake, power-off. The original demo ran
a script when a new volume was mounted. Read the NSWorkspace class
reference.
#!/usr/bin/env python
import time
import Foundation
NSObject = Foundation.NSObject
import AppKit
NSWorkspace = AppKit.NSWorkspace
NSWorkspaceWillSleepNotification =
AppKit.NSWorkspaceWillSleepNotification
NSWorkspaceDidWakeNotification = AppKit.NSWorkspaceDidWakeNotification
import PyObjCTools.AppHelper as AppHelper
class NotificationHandler(NSObject):
"""Class that handles the sleep notifications."""
def handleSleepNotification_(self, aNotification):
for i in range(1, 101):
time.sleep(1)
print str(i)+u"seconds yet.."
ws = NSWorkspace.sharedWorkspace()
notificationCenter = ws.notificationCenter()
sleepHandler = NotificationHandler.new()
notificationCenter.addObserver_selector_name_object_(
sleepHandler,
"handleSleepNotification:",
NSWorkspaceWillSleepNotification,
None)
print "Waiting for sheep count to start..."
AppHelper.runConsoleEventLoop()
More information about the Pythonmac-SIG
mailing list