如何让Python Tibber模块仅返回单次最新值而非循环输出?
修改方案
直接利用tibber库的异步特性,在获取到第一条实时数据后立即停止数据流,实现单次获取最新值的需求。修改后的代码如下:
import tibber import asyncio async def get_single_power_reading(): account = tibber.Account("tokenstring") home = account.homes[0] # 定义变量存储单次获取的结果 power_value = None async def process_data(data): nonlocal power_value power_value = data.power # 获取数据后立刻停止实时数据流 await home.stop_live_feed() # 注册事件回调 home.event("live_measurement")(process_data) # 启动实时数据流 await home.start_live_feed(user_agent="Homey/10.0.0") return power_value # 执行异步函数并输出结果 if __name__ == "__main__": result = asyncio.run(get_single_power_reading()) print(f"单次获取的功率值: {result}")
关键改动说明:
- 用
asyncio管理异步流程,确保代码可以同步执行并获取结果 - 通过
nonlocal关键字让回调函数能修改外部函数的变量,存储单次数据 - 获取到数据后立即调用
await home.stop_live_feed()终止数据流,避免持续接收数据 - 借助
asyncio.run()直接运行异步函数,拿到单次获取的结果
内容的提问来源于stack exchange,提问作者Husky-CGN
相关产品推荐
相关产品推荐

