首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在/sys中轮询文件

如何在/sys中轮询文件
EN

Stack Overflow用户
提问于 2010-06-08 08:12:15
回答 2查看 1.2K关注 0票数 2

我被困在/sys/中读取一个文件,其中包含我的诺基亚N900手机环境光传感器的Lux中的光强度。

参见talk.maemo.org上的线程

我试图使用pyinotify来轮询文件,但这在我看来是不对的,因为文件总是"process_IN_OPEN“、"process_IN_ACCESS”和"process_IN_CLOSE_NOWRITE“。

我基本上是想尽快得到更改,如果更改触发了一个事件,执行一个类.

下面是我尝试过的代码,它可以工作,但不像我预期的那样(我希望process_IN_MODIFY被触发):

代码语言:javascript
复制
#!/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:

嗯,如果有一种特殊的机制,我想不出的是:

代码语言:javascript
复制
f = open('/sys/class/i2c-adapter/i2c-2/2-0029/lux')
while True:
    value = f.read()
    print value
    f.seek(0)

这个,包裹在自己的线程中,可以达到这个目的,但是有没有人有一个更聪明,更少占用CPU和更快的方法来获得最新的价值?

EN

回答 2

Stack Overflow用户

发布于 2010-06-08 08:30:28

由于/sys/file是一个伪文件,它只是显示一个基础的、易失性的操作系统值的视图,因此永远不会引发修改事件是有意义的。由于文件是从下面“修改”的,所以它不遵循常规的文件系统语义。

如果从未引发修改事件,那么使用像pinotify这样的包将不会给您带来任何好处。最好是寻找一种特定于平台的机制。

对更新1的响应:

由于N900 maemo运行时支持GFileMonitor,所以最好检查它是否能够提供所需的异步事件。

如我所知,忙碌的等待是浪费的。在手机上,它确实可以耗尽电池。你至少应该睡在繁忙的圈子里。

票数 1
EN

Stack Overflow用户

发布于 2010-06-08 09:54:20

嗯,如果有一种特殊的机制,我想不出的是:

代码语言:javascript
复制
f = open('/sys/class/i2c-adapter/i2c-2/2-0029/lux')
while True:
    value = f.read()
    print value
    f.seek(0)

这个,包裹在自己的线程中,可以达到这个目的,但是有没有人有一个更聪明,更少占用CPU和更快的方法来获得最新的价值?

干杯,博尔尼

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2995664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档