Python 代码在 Ubuntu 14.04 中有效,但在 Win8.1 中无效
Python code works in Ubuntu 14.04 but not in Win8.1
我收到了 this code,我想 运行 我的 windows 8.1 操作系统上的脚本 runCortexReader.py . Spyder 给我这个错误:
AttributeError: 'module' 对象没有属性 'SO_REUSEPORT'
使用 Ubuntu 14.04(使用双引导,而不是虚拟机)
在同一台计算机上使用完全相同的代码与 Spyder 一起工作
问题是,我真的很想 运行 Windows 上的脚本,因为它稍后应该与未安装在 Ubuntu 上的 Matlab 通信。
我在两个系统上都使用 Python 2.7。
有人知道错误可能出在哪里吗?
SO_REUSEPORT(还有SO_REUSEADDR)是套接字相关的设置。在[SO]: How do SO_REUSEADDR and SO_REUSEPORT differ?中,对它们之间的区别有很好的解释。
SO_REUSEPORT 仅出现在较新的 Linux 版本中 - 在 /usr/include/asm-generic/socket.h[=52= 中定义] 的值通常为 15 (#define SO_REUSEPORT 15
):
- 在Ubuntu14中定义,但在Ubuntu12中没有定义(该行被注释掉:
/* 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)
or (this is even dirtier) 在同一个文件中,导入 socket 模块后,添加这一行:
socket.SO_REUSEPORT = socket.SO_REUSEADDR
我收到了 this code,我想 运行 我的 windows 8.1 操作系统上的脚本 runCortexReader.py . Spyder 给我这个错误:
AttributeError: 'module' 对象没有属性 'SO_REUSEPORT'
使用 Ubuntu 14.04(使用双引导,而不是虚拟机)
在同一台计算机上使用完全相同的代码与 Spyder 一起工作问题是,我真的很想 运行 Windows 上的脚本,因为它稍后应该与未安装在 Ubuntu 上的 Matlab 通信。
我在两个系统上都使用 Python 2.7。
有人知道错误可能出在哪里吗?
SO_REUSEPORT(还有SO_REUSEADDR)是套接字相关的设置。在[SO]: How do SO_REUSEADDR and SO_REUSEPORT differ?中,对它们之间的区别有很好的解释。
SO_REUSEPORT 仅出现在较新的 Linux 版本中 - 在 /usr/include/asm-generic/socket.h[=52= 中定义] 的值通常为 15 (#define SO_REUSEPORT 15
):
- 在Ubuntu14中定义,但在Ubuntu12中没有定义(该行被注释掉:
/* 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)
or (this is even dirtier) 在同一个文件中,导入 socket 模块后,添加这一行:
socket.SO_REUSEPORT = socket.SO_REUSEADDR