Mac OS X上的python套接字给出了AttributeError:'module'对象没有属性'IF_INET'

时间:2011-07-27 04:52:03

标签: python macos sockets udp homebrew

我正在Mac OS X 10.6上尝试一些python网络编程。我正在使用Homebrew安装的Python 2.7,并且我试图从包含UDP客户端和服务器的Foundations Of Python Network Programming(好书btw)运行一个简单的脚本,但在尝试使用来自的varibles时,我得到了前面提到的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

1 个答案:

答案 0 :(得分:4)

我看了一下Python源代码。在某些平台上,AF_INETSOCKET.py中定义了IN.py,这是/usr/include/sys/socket.h或类似内容自动生成的。

我实际上无法看到这是为OSX定义的,但是你的版本可能会出现奇怪的事情。

到目前为止,最可能的问题是您已经破坏了一条重要规则 - 不要在标准库中的模块之后命名文件。路径中或socket.py所在目录中的udp_local.py文件会导致此类错误。我最近在试图回答一个问题的时候用argparse做了这个。

作为一种临时解决方法,您可以尝试AF_INET = 2AF_INET = 1 - 在大多数地方似乎都是2,但在非Unix平台上可能是1。< / p>