我正在尝试在一个类中使用websocket.WebSocketApp,以便以后可以使用从websocket检索的数据:
import requests
from urlparse import (urlparse, parse_qs)
import json
import websocket
class NeuroStream:
def __init__(self, sensor, token):
self._sensor = sensor
self.token = token
self.buf = []
return
def stream(self):
self.ws = websocket.WebSocketApp(
"wss://api.foofoo.com/api/v1/features/" + self._sensor
+ "/real-time/?all=true&access_token=" + self.token,
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close)
self.ws.run_forever()
def on_error(self, error):
print(error)
def on_close(self):
print "connection lost"
def on_message(self, message):
message = json.loads(message)
biomarkers = message[u'features']
c1 = biomarkers[u'c1']
self.buf.append(c1)
当我在类的作用域之外定义函数on_error,on_close和on_message时,用ws替换self并从调用中忽略self,它将起作用。但后来我不能使用
self.buf.append(c1)
稍后使用的关键是
编辑: 在错误之前以及在可行的情况下,我正在运行的代码:
from NeuroStream import *
ns = NeuroStream('a_sensor', 'a_token')
ns.stream()
我得到的错误是:
“找不到记录器“ websocket”的处理程序”
我看到了一个类似的线程,但没有帮助: Using a websocket client as a class in python
答案 0 :(得分:1)
我观察到两个问题。
1)"wss://api.foofoo.com/api/v1/features/" + self.sensor
应该是"wss://api.foofoo.com/api/v1/features/" + self._sensor
,因为您已在初始化期间定义了self._sensor = sensor
。
2)似乎您正在尝试使用websocket
库的客户端功能。
尝试如下安装websocket-client
,然后重新运行代码。
pip install websocket-client
代码对我来说具有以上两个更改。
Python 2.7.14 (default, Mar 22 2018, 14:43:05)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from aam import NeuroStream
>>> ns = NeuroStream('a_sensor', 'a_token')
>>> ns.stream()
>>>