【发布时间】:2011-07-27 04:52:03
【问题描述】:
我正在 Mac OS X 10.6 上尝试一些 python 网络编程。我正在使用 Homebrew 安装的 Python 2.7,并尝试从包含 UDP 客户端和服务器的Foundations Of Python Network Programming(顺便说一句很棒的书)运行一个简单的脚本,但是在尝试使用来自套接字模块的变量时出现上述 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
【问题讨论】:
-
也许这是 Homebrew 的问题?
-
也许吧,但是当我用 /usr/bin/python 尝试它时,我遇到了类似的问题。无论如何,我想我会尝试重新安装 Homebrew python 看看是否有帮助。
-
这很奇怪。
dir(socket)导入后显示什么? -
我将我的文件命名为
socket.py。我的工作目录中有另一个socket.pyc文件,该文件是我之前运行它时创建的。删除它解决了问题。
标签: python macos sockets udp homebrew