【问题标题】:Python code works in Ubuntu 14.04 but not in Win8.1 [closed]Python 代码适用于 Ubuntu 14.04,但不适用于 Win8.1 [关闭]
【发布时间】:2016-03-16 09:29:42
【问题描述】:

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

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

同样的代码可以在使用 Ubuntu 14.04 的同一台计算机上与 Spyder 一起使用(使用双启动,而不是虚拟机)

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

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

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

【问题讨论】:

  • 请添加完整的回溯
  • 一个最小的运行示例怎么样?

标签: python windows-8.1 ubuntu-14.04 attributeerror


【解决方案1】:

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 上运行,你必须做的是注释掉(通过添加 # char 开头)所有引用它的行(我在以下文件中找到它,但它可能存在于其他文件中):

  • CortexDecoder.py 第 244 行:

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

或(这更脏)在同一个文件中,在导入socket模块后,添加这一行:

socket.SO_REUSEPORT = socket.SO_REUSEADDR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2020-06-26
    相关资源
    最近更新 更多