如何让pybluez每X秒返回一份发现设备的列表并重复?

5 投票
2 回答
14146 浏览
提问于 2025-04-16 01:53

我一直在想怎么用 pybluez 来监控附近的设备...

我想让我的程序每20秒搜索一次设备。问题是,怎么才能让pybluez好好工作呢? :/

使用他们的示例代码 http://code.google.com/p/pybluez/source/browse/trunk/examples/simple/inquiry.py,发现设备其实很简单。你运行那段代码,它就会输出设备的MAC地址,如果你愿意的话,还可以显示设备名称。

我该怎么把这个放进一个循环里呢?我试着用下面的代码,但它一直失败 >.<

import bluetooth

def search():
   while True:
      devices = bluetooth.discover_devices(lookup_names = True)

      yield devices

for addr, name in search():
   print "{0} - {1}".format(addr, name)

2 个回答

0

我不太了解pybluez这个库,不过bluetooth.discover_devices(lookup_names = True)这个函数本身就会返回一个可以循环的对象,所以你应该用循环来处理它。

def search():
   while True:
      devices = bluetooth.discover_devices(lookup_names = True)
      for x in devices: # <--
         yield x        # <-- 
7

这段代码对我有效:

'''
Created on Nov 16, 2011    
@author: Radu
'''
import time
import bluetooth

def search():         
    devices = bluetooth.discover_devices(duration=20, lookup_names = True)
    return devices

if __name__=="__main__":
    while True:        
        results = search()
        if (results!=None):
            for addr, name in results:
                print "{0} - {1}".format(addr, name)
            #endfor
        #endif
        time.sleep(60)
    #endwhile

它会搜索一个设备20秒,然后休眠1分钟,这个过程会一直循环下去。我是在Windows系统上运行的,使用的是Serioux蓝牙适配器的默认驱动。

希望这对你有帮助。

撰写回答