我一直在阅读 /sys/ 中的文件,其中包含诺基亚 N900 手机上环境光传感器的光强度(以勒克斯为单位)。
我尝试使用 pyinotify 来轮询文件,但这对我来说似乎有些错误,因为文件总是“process_IN_OPEN”、“process_IN_ACCESS”和“process_IN_CLOSE_NOWRITE”
我基本上想尽快获得更改,如果发生更改会触发事件,请执行一个类...
这是我尝试过的代码,它有效,但不像我预期的那样(我希望触发 process_IN_MODIFY):
#!/usr/bin/env python
import os, time, pyinotify
import pyinotify
ambient_sensor = '/sys/class/i2c-adapter/i2c-2/2-0029/lux'
wm = pyinotify.WatchManager() # Watch Manager
mask = pyinotify.ALL_EVENTS
def action(self, the_event):
value = open(the_event.pathname, 'r').read().strip()
return value
class EventHandler(pyinotify.ProcessEvent):
...
def process_IN_MODIFY(self, event):
print "MODIFY event:", action(self, event)
...
#log.setLevel(10)
notifier = pyinotify.ThreadedNotifier(wm, EventHandler())
notifier.start()
wdd = wm.add_watch(ambient_sensor, mask)
wdd
time.sleep(5)
notifier.stop()
更新1:
嗯,我不知道是否有特殊机制的情况如下:
f = open('/sys/class/i2c-adapter/i2c-2/2-0029/lux')
while True:
value = f.read()
print value
f.seek(0)
这个,包裹在一个自己的线程中,可以解决问题,但是有没有人有一个更聪明、更少占用 CPU 和更快的方法来获得最新的价值?