Python代码适用于Ubuntu 14.04,但不适用于Win8.1

时间:2015-12-10 16:35:24

标签: python windows-8.1 ubuntu-14.04 attributeerror

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

AttributeError:'module'对象没有属性'SO_REUSEPORT'

使用Ubuntu 14.04(使用双启动,而不是虚拟机)在同一台计算机上使用Spyder完全相同的代码

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

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

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

1 个答案:

答案 0 :(得分: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