Nokia N900 携帯電話の環境光センサーの光強度をルクス単位で含む /sys/ のファイルの読み取りに行き詰まりました。
ここのtalk.maemo.orgのスレッドを参照してください
ファイルをポーリングするために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 の占有率が低く、より高速な方法を持っている人はいますか?