我使用的是Ubuntu 12.04。 有没有办法在Python中捕捉暂停事件,即如果笔记本电脑将要暂停,请执行此操作…? 捕捉关机事件的同一个问题。
我想最简单的方法是使用DBUS python接口,并在'org.freedesktop.UPower'接口上侦听'AboutToSleep'和/或'Sleeping'事件
如果有人在同一个问题上绊倒,这里是代码:
#!/usr/bin/env python import dbus # for dbus communication (obviously) import gobject # main loop from dbus.mainloop.glib import DBusGMainLoop # integration into the main loop def handle_resume_callback(): print "System just resumed from hibernate or suspend" def handle_suspend_callback(): print "System about to hibernate or suspend" DBusGMainLoop(set_as_default=True) # integrate into main loob bus = dbus.SystemBus() # connect to dbus system wide bus.add_signal_receiver( # defince the signal to listen to handle_resume_callback, # name of callback function 'Resuming', # singal name 'org.freedesktop.UPower', # interface 'org.freedesktop.UPower' # bus name ) bus.add_signal_receiver( # defince the signal to listen to handle_suspend_callback, # name of callback function 'Sleeping', # singal name 'org.freedesktop.UPower', # interface 'org.freedesktop.UPower' # bus name ) loop = gobject.MainLoop() # define mainloop loop.run() # run main loop
你可以扩展这个代码,它侦听来自acpid的事件,试着打印它接收到的字符串并生成你想要的事件,看看这个字符串是什么样的。
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.connect("/var/run/acpid.socket") print "Connected to acpid" while 1: for event in s.recv(4096).split('\n'): event=event.split(' ') if len(event)<2: continue print event if event[0]=='ac_adapter': if event[3]=='00000001': #plugged plugged() #Power plugged event else: #unplugged unplugged() #Power unplugged event elif event[0]=='button/power': power_button() #Power button pressed elif event[0]=='button/lid': if event[2]=='open': lid_open() #Laptop lid opened elif event[2]=='close': lid_close() #Laptop lid closed