Как исправить 'TypeError:' b'instancemethod '' объект не вызывается 'с верной версией Python на EV3 - PullRequest
0 голосов
/ 15 мая 2019

Система

  • Система ПК: Windows 10, python 2.7.13
  • Система EV3: Brickmann ev3dev, неизвестная версия python
  • rpyc-версия: 3.3.0 (обе системы)

Код

Я хочу удаленно управлять своим EV3 с моего компьютера, чтобы обрабатывать онлайн-данные.Я использую PuTTY для доступа к EV3 с моего компьютера с Windows.Я пытался следовать этому руководству для rpyc: https://ev3dev -lang.readthedocs.io / projects / python-ev3dev / en / stable / rpyc.html .Согласно учебному пособию, на моем EV3 я запустил скрипт на python со следующими двумя строками содержимого

#!/bin/bash
python3 `which rpyc_classic.py`

На моем компьютере я набираю python:

import rpyc
conn = rpyc.classic.connect('192.168.137.2')

Ошибка

При входе во вторую строку я получаю следующие ошибки в моем терминале Windows:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\utils\classic.py", line 68, in connect
    return factory.connect(host, port, SlaveService, ipv6 = ipv6, keepalive = keepalive)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\utils\factory.py", line 90, in connect
    return connect_stream(s, service, config)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\utils\factory.py", line 51, in connect_stream
    return connect_channel(Channel(stream), service = service, config = config)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\utils\factory.py", line 40, in connect_channel
    return Connection(service, channel, config = config)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\protocol.py", line 151, in __init__
    self._init_service()
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\protocol.py", line 154, in _init_service
    self._local_root.on_connect()
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\service.py", line 152, in on_connect
    self._conn.builtin = self._conn.modules.__builtin__
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\service.py", line 121, in __getattr__
    return self[name]
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\service.py", line 118, in __getitem__
    self.__cache[name] = self.__getmodule(name)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\netref.py", line 196, in __call__
    return syncreq(_self, consts.HANDLE_CALL, args, kwargs)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\netref.py", line 71, in syncreq
    return conn.sync_request(handler, oid, *args)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\protocol.py", line 438, in sync_request
    self.serve(0.1)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\protocol.py", line 387, in serve
    data = self._recv(timeout, wait_for_lock = True)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\protocol.py", line 345, in _recv
    data = self._channel.recv()
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\channel.py", line 50, in recv
    header = self.stream.read(self.FRAME_HEADER.size)
  File "C:\Python27\lib\site-packages\rpyc-3.3.0-py2.7.egg\rpyc\core\stream.py", line 195, in read
    raise EOFError("connection closed by peer")
EOFError: connection closed by peer

и в терминале PuTTY:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3/dist-packages/rpyc/utils/server.py", line 172, in _authenticate_and_serve_client
    self._serve_client(sock2, credentials)
  File "/usr/lib/python3/dist-packages/rpyc/utils/server.py", line 197, in _serve_client
    conn._init_service()
  File "/usr/lib/python3/dist-packages/rpyc/core/protocol.py", line 154, in _init_service
    self._local_root.on_connect()
  File "/usr/lib/python3/dist-packages/rpyc/core/service.py", line 150, in on_connect
    self._conn.builtin = self._conn.modules.builtins
  File "/usr/lib/python3/dist-packages/rpyc/core/service.py", line 121, in __getattr__
    return self[name]
  File "/usr/lib/python3/dist-packages/rpyc/core/service.py", line 118, in __getitem__
    self.__cache[name] = self.__getmodule(name)
TypeError: 'b'instancemethod'' object is not callable

Я нашел здесь (https://github.com/tomerfiliba/rpyc/issues/250)и на многих других сайтах, которые я не могу смешать python2 и python3 для rpyc. Когда я набираю python в терминале PuTTY, он открывает python2.7.13, поэтому я также установил python2.7.13 на свой ПК.Однако в руководстве по rpyc (код выше) требуется, чтобы я открыл rpyc-сервер с помощью python 3. Кроме того, приведенное выше полное сообщение об ошибке выглядит так, как будто для сервера rpyc используется python 3. Нужно ли менять какие-либо версии Python?Заранее спасибо!

Редактировать:

Я также попытался запустить сервер python с

python `which rpyc_classic.py`

вместо "python3 ...", затемошибка не произошла, но затем в следующем шаге из учебника:

ev3 = conn.modules['ev3dev.ev3']

Я получил ошибку:

ImportError: No module named ev3dev.ev3

, которая, по-видимому, возникает, потому что ev3dev-lang-python снова нуждается в python3.Я запутался, когда использовать какую версию Python.Можете ли вы помочь мне?

...