2015-12-10 3 views
1

Я получил this code, из которого я хотел бы запустить скрипт runCortexReader.py на моей операционной системе Windows 8.1. Spyder дает мне эту ошибку:Код Python работает в Ubuntu 14.04, но не в Win8.1

AttributeError: «модуль» объект не имеет атрибута

Сам же код «SO_REUSEPORT» работает с Spyder на том же компьютере, используя Ubuntu 14.04 (с использованием двойной загрузки, а не виртуальная машина)

Проблема в том, что я действительно хотел бы запустить сценарий в Windows, поскольку он должен позже связываться с Matlab, который не установлен на Ubuntu.

Я использую Python 2.7 на обеих системах.

Есть ли у кого-нибудь идея, где ошибка?

+0

Пожалуйста, добавьте полные отслеживающий – MaxNoe

+0

насчет минимального работают, например? – Trilarion

ответ

1

SO_REUSEPORT (а также SO_REUSEADDR) является установкой, связанной с разъемом. Here - хорошее объяснение различий между ними.

SO_REUSEPORT присутствует только в новых версиях Linux - это определено в /usr/include/asm-generic/socket.h до значения 15, как правило, (#define SO_REUSEPORT 15):

  • он определен в Ubuntu14, но не в Ubuntu12 (линия закомментирована: /* To add :#define SO_REUSEPORT 15 */)
  • это определено в RHEL7, но не в RHEL5 (такой же комментарий)

На Windows, с другой стороны, нет такого макроса, определенного в Visual Studio включат файлы (обычно Winsock2.h)

Также setsockopt official doc не упоминает об этом в возможных именах параметров ,

Что вы должны сделать для того, чтобы он работал на для Windows (хотя это не хороший подход), чтобы закомментировать (путем добавления # полукокса в начале) все строки, которые ссылаются на его (Я нашел его на следующий файл, но он может присутствовать в остальных):

  • CortexDecoder.py линия 244:

    self.cortexSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) 
    

или (это даже грязнее) в том же файл (ы), после импорта socket модуля, добавьте следующую строку:

socket.SO_REUSEPORT = socket.SO_REUSEADDR 
Смежные вопросы