2

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 の占有率が低く、より高速な方法を持っている人はいますか?

4

2 に答える 2

1

/sys/file は、基礎となる揮発性のオペレーティング システム値に関するビューを表示するだけの疑似ファイルであるため、変更イベントが発生しないことは理にかなっています。ファイルは下から「変更」されるため、通常のファイルシステムのセマンティクスには従いません。

変更イベントがまったく発生しない場合は、pinotify のようなパッケージを使用しても何も起こりません。プラットフォーム固有のメカニズムを探すほうがよいでしょう。

アップデート 1 への対応:

N900 maemo ランタイムはGFileMonitorをサポートしているため、必要な非同期イベントを提供できるかどうかを確認することをお勧めします。

忙しく待っていることは、ご存知のように、無駄です。電話では、実際にバッテリーを消耗する可能性があります。少なくとも忙しいループで眠る必要があります。

于 2010-06-08T08:30:28.757 に答える
0

うーん、特別なメカニズムがあるかどうかの手がかりなしに私が思いついたのは次のとおりです。

f = open('/sys/class/i2c-adapter/i2c-2/2-0029/lux')
while True:
    value = f.read()
    print value
    f.seek(0)

独自のスレッドにラップされたこれはうまくいく可能性がありますが、最新の値を取得するためのよりスマートで、CPU の占有率が低く、より高速な方法を持っている人はいますか?

乾杯ビョルン

于 2010-06-08T09:54:20.500 に答える