Python代码在Ubuntu 14.04中有效,但在Win8.1中不可用[关闭]

问题描述 投票:1回答:1

我收到了this code,我想在Windows 8.1操作系统上运行脚本runCortexReader.py。 Spyder给我这个错误:

AttributeError:'模块'对象没有属性'SO_REUSEPORT'

相同的代码在使用Ubuntu 14.04的同一台计算机上与Spyder一起使用(使用双引导,而不是虚拟机)

问题是,我真的很想在Windows上运行该脚本,因为该脚本以后应与未在Ubuntu上安装的Matlab通信。

我在两个系统上都使用Python 2.7。

有人知道错误可能在哪里吗?

python windows-8.1 ubuntu-14.04 attributeerror
1个回答
2
投票

SO_REUSEPORT(以及SO_REUSEADDR)是与套接字相关的设置。在[SO]: How do SO_REUSEADDR and SO_REUSEPORT differ?中,对它们之间的区别有很好的解释。

SO_REUSEPORT仅在较新的Linux版本中存在-在/ usr / include / asm-generic / socket.h中定义,通常为15(#define SO_REUSEPORT 15):

  • Ubuntu 14中定义,但未在Ubuntu 12中定义(该行被注释掉:/* To add :#define SO_REUSEPORT 15 */
  • RHEL 7]中定义,但在[[RHEL 5中未定义(相同的注释)]
  • 另一方面,[[Win
上,

Visual Studio的包含文件中没有定义这样的宏(通常为Winsock2.h)。此外,[MS.Docs]: setsockopt function在可能的选项名称中也没有提及它。

为了使它在

Win

上正常运行,您必须要做的就是注释掉(通过在

开头)引用它的所有行(我在以下文件中找到了它,但是它可能在其他文件中也存在):

  • CortexDecoder.py
第244行:

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

或(
这甚至更脏)在同一文件中,导入

socket模块后,添加以下行:socket.SO_REUSEPORT = socket.SO_REUSEADDR

© www.soinside.com 2019 - 2024. All rights reserved.