Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Websocket代码可以在Windows上工作,但不能在Linux上工作_Python_Linux_Windows_Websocket_Python 3.6 - Fatal编程技术网

Python Websocket代码可以在Windows上工作,但不能在Linux上工作

Python Websocket代码可以在Windows上工作,但不能在Linux上工作,python,linux,windows,websocket,python-3.6,Python,Linux,Windows,Websocket,Python 3.6,我正在运行相同的代码;以下内容在Windows中运行,但将在Ubuntu 16.04上正确运行 import websocket import json class WhatEver(object): def __init__(self): self.ws = websocket.WebSocketApp( 'wss://beijing.51nebula.com/', on_message=self.on_ws_messa

我正在运行相同的代码;以下内容在Windows中运行,但将在Ubuntu 16.04上正确运行

import websocket
import json

class WhatEver(object):
    def __init__(self):
        self.ws = websocket.WebSocketApp(
            'wss://beijing.51nebula.com/',
            on_message=self.on_ws_message,
            on_open=self.on_open
        )

    def rin_forever(self):
        print("start run forever")
        self.ws.run_forever()


    def on_ws_message(self, ws,message):
        print (message)
        self.ws.close()

    def _send_msg(self, params):
        call = {"id": 1, "method": "call",
                "params": params}
        self.ws.send(json.dumps(call))

    def on_open(self, ws):
        print("start open function")
        self._send_msg([1, "login", ["",""]])


if __name__ == '__main__':
    ws=WhatEver()
    print("start")
    ws.rin_forever()
    print("close")
我已尝试在Windows和Ubuntu之间重新安装所有模块,包括相同版本的Python和websocket,此代码在Windows系统上的打印是正确的:

start
start run forever
start open function
{"id":1,"jsonrpc":"2.0","result":true}
close
但是,当它在Ubuntu中运行时,虽然它进行打印,但却遗漏了一些打印语句:

start
start run forever
close

当我在Ubuntu中调试代码时,我发现主线程在self.ws.run\u forever调用中停止,并且从不跳转到on\u open函数。然后它爆发了。

您正在使用两个不同版本的库,Windows上的版本比0.53版本旧。从版本0.53开始,websocket项目区分绑定方法和常规函数之间的回调行为

您正在传入绑定方法self.on_open和self.on_ws_消息,此时ws参数不会传入。显然,这些方法应该已经通过它们的实例访问websocket,这可能是因为预期的用例是

不幸的是,项目和变更没有对此进行记录

因此,对于版本0.53及更高版本,请从回调中删除ws参数:

class WhatEver(object):
    def __init__(self):
        self.ws = websocket.WebSocketApp(
            'wss://beijing.51nebula.com/',
            on_message=self.on_ws_message,
            on_open=self.on_open
        )


    # ...

    def on_ws_message(self, message):
        print(message)
        self.ws.close()

    # ...

    def on_open(self):
        print("start open function")
        self._send_msg([1, "login", ["", ""]])
您可以通过启用日志记录来发现此类问题;websocket模块在回调logger.getLogger'websocket'logger时记录遇到的异常。查看这些问题的快速方法是启用跟踪:

websocket.enableTrace(True)
它只向该日志记录对象添加日志记录处理程序,为该对象打开logging.DEBUG级别的报告,并启用完整套接字数据回显

或者,您可以配置日志记录以输出消息,通常使用:

这使您可以查看logging.ERROR级别的消息和更新

使用后一个选项,未更正的代码版本将打印出来:

start
start run forever
ERROR:websocket:error from callback <bound method WhatEver.on_open of <__main__.WhatEver object at 0x1119ec668>>: on_open() missing 1 required positional argument: 'ws'
close

还有,你在用什么图书馆?非常感谢。这个问题困扰了我一个星期…只是因为websocket的版本。
start
start run forever
ERROR:websocket:error from callback <bound method WhatEver.on_open of <__main__.WhatEver object at 0x1119ec668>>: on_open() missing 1 required positional argument: 'ws'
close
>>> import websocket
>>> websocket.__version__
'0.54.0'