Mac OS X 上的 python 套接字给出 AttributeError : 'module' object has no attribute 'IF_INET'

标签 python macos sockets udp homebrew

我正在 Mac OS X 10.6 上尝试一些 python 网络编程。我正在使用 Homebrew 安装的 Python 2.7,并试图从 Foundations Of Python Network Programming 运行一个简单的脚本。 (伟大的书 btw)包含一个 UDP 客户端和服务器,但是在尝试使用套接字模块中的变量时出现上述 AttribuiteError。脚本如下:

#! /usr/bin/env python

import socket, sys

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

MAX = 65535
PORT = 1060

if sys.argv[1:] == ['server']:
    s.bind(('127.0.0.1', PORT))
    print('Listening at', s.getsockname())
    while True:
        data, address = s.recvfrom(MAX)
        print('The client at ', address, ' says ', repr(data))
        s.sendto('Your data was %d bytes' % len(data), address)

elif sys.argv[1:] == ['client']:
    print('address before sending: ', s.getsockname())
    s.sendto('This is my message', ('127.0.0.1', PORT))
    print('address after sending: ', s.getsockname())
    data, address = s.recvfrom(MAX)
    print('The server at ', address, ' says ', repr(data))
else:
    print >>sys.stderr, 'usage: udp_local.py client|server'

通过 python script.py server 运行此脚本会导致以下错误:

Traceback (most recent call last):
  File "udp_local.py", line 5, in <module>
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
AttributeError: 'module' object has no attribute 'AF_INET'

我已经尝试过 python 控制台,在运行 import socket 之后,我似乎无法获取任何模块变量。我在谷歌上进行了广泛的搜索,但还没有解决同样的问题。有没有人知道它可能是什么?为了以防万一,这里是 env python 的输出:

Python 2.7.1 (r271:86832, Jul 10 2011, 10:39:45) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin

最佳答案

我查看了 Python 源代码。在某些平台上,AF_INET 定义在SOCKET.pyIN.py 中,它是从/usr/include/自动生成的sys/socket.h 或类似的东西。

我实际上看不到这是为 OSX 定义的位置,但您的版本中可能发生了一些奇怪的事情。

到目前为止,最有可能的问题是您违反了一条重要规则——永远不要在标准库中的模块之后命名文件。您的路径中或与 udp_local.py 相同的目录中的 socket.py 文件会导致此类错误。我最近在尝试回答此处的问题时使用 argparse 进行了此操作。

作为临时解决方法,您可以尝试 AF_INET = 2AF_INET = 1 -- 在大多数地方它似乎是 2 但是在非 Unix 平台上可能是 1

关于Mac OS X 上的 python 套接字给出 AttributeError : 'module' object has no attribute 'IF_INET' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839568/

相关文章:

python - 从 python 脚本打开 mac 中的任何应用程序,如 vlc、chrome、终端

python - 在 Kivy Python 中制作具有预定义值的文本输入

python - 用于映射大数据的Python共享内存字典

python - 用空行填充QtableView的底部空间

java - Mac OS X 中的 "Click to execute"

objective-c - @synchronized block 是否保证释放它们的锁?

python - numpy 数组中所有值的平方根,保留符号

javascript - HTML5 中的 TCP/IP 套接字通信

c - nonblocking recv返回0怎么知道是哪种情况?

sockets - 使用 socket.io 授权