我使用的是Ubuntu 12.04。有沒有辦法在Python中捕捉暫停事件,即如果筆記本電腦要暫停,請執行此操作...?捕捉關機事件的同一個問題。如何在Python中捕獲系統暫停事件?
回答
我認爲最簡單的方法是使用DBUS python接口 和聽「AboutToSleep」和/或「org.freedesktop.UPower」接口「睡覺」事件
您可以擴展此代碼,它監聽來自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
謝謝。它正在尋找什麼。順便說一句,你在哪裏可以得到這些代碼是什麼意思?例如000000081? – koogee
哼不知道說實話,我通過生成的事件,看到了字符串是什麼樣子,你可以嘗試的acpid的文件,這是守護程序發送這些字符串中看到了這些。 – LtWorf
這很奇怪。看起來我在暫停/恢復後只能獲得蓋子打開/關閉信號中的一個。 [ '處理器', 'CPU0', '00000081', '00000000'] ** [ '按鈕/蓋', 'LID0', '00000080', '00000003'] ** [ '處理器' ['battery','BAT0','00000080','0000000'] ['ac_adapter','ADP0','00000080','00000000'] ['battery' ] [「處理器」,「CPU0」,「00000081」,「00000000」] – koogee
如果有一個人對同樣的問題絆倒,下面的代碼:
#!/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
- 1. 使用python捕獲系統事件
- 2. Joomla - 如何捕獲系統事件
- 3. 捕獲系統事件
- 4. 在活動中捕獲系統事件
- 5. 如何在minko中捕獲和處理系統事件?
- 6. AIR中是否存在系統暫停事件?
- 7. 系統在事件循環中暫停以進行大循環
- 8. unittest中的系統(「暫停」)
- 9. 如何在JavaScript中暫停事件?
- 10. 如何在jQuery中暫停事件?
- 11. 如何撤消系統(「暫停」)
- 12. C#電梯系統暫停
- 13. 系統(「暫停」)澄清
- 14. 如何捕獲Windows操作系統事件? (C#)
- 15. 在Android系統中可靠地暫停媒體播放系統
- 16. jquery鍵盤暫停捕獲
- 17. 未捕獲拋出:暫停
- 18. 捕獲系統默認編輯器關閉事件在Java中
- 19. 如何在java中進行系統暫停進行調試?
- 20. FileSystemWatcher停止捕獲事件
- 21. 暫停播放記錄在android系統
- 22. 如何暫停在python
- 23. 如何在win7上捕獲文件打開事件操作系統
- 24. 如何在jQuery Mobile carousel中捕獲暫停時間?
- 25. 暫停python並等待Matplotlib事件
- 26. 在Clojure捕獲系統/出
- 27. 在Python中捕獲關機事件
- 28. Python tkinter捕獲Windows系統關機
- 29. 如何捕捉系統中出現的事件(android)?
- 30. 如何暫停故事板?
這本書以醒目註銷事件。但可以幫助你:http://stackoverflow.com/questions/2490166/detect-user-logout-shutdown-in-python-gtk-under-linux-sigterm-hup-not-rece – theAlse
謝謝...我會看看gnome.ui – koogee