我有一台笔记本电脑和一台台式机,都运行Ubuntu 10.04,都运行Ubuntu附带的Python 2.6.5。
在笔记本电脑上,以下程序
#!/usr/bin/env python
import socket
print(socket.getaddrinfo("localhost", 8025, 0, socket.SOCK_STREAM))
有效 - 也就是说,它打印出一些东西而不会出错。
事实上,这些东西是:[(10, 1, 6, '', ('::1', 8025, 0, 0)), (2, 1, 6, '', ('127.0.0.1', 8025))]
(这是一堆IPv6数据和一堆IPv4数据。)
但是,在另一个方框中,同一个程序会这样做:
Traceback (most recent call last):
File "socktest.py", line 5, in <module>
print(socket.getaddrinfo("localhost", 8025, 0, socket.SOCK_STREAM))
socket.gaierror: [Errno -2] Name or service not known
为什么?
笔记本电脑是x86(即32位),而桌面是x86_64,但如果重要,我会感到惊讶。笔记本电脑还有两个网络接口(无线和有线),而桌面只有有线;我再次怀疑这是否相关。根据“ifconfig”,所有三个接口都绑定到IPv6地址。我把两个盒子上的/ etc / network分开了,看不出有什么区别,除了笔记本电脑有这个子句
# The primary network interface
auto eth0
iface eth0 inet dhcp
......再一次,这让我感到无关紧要。
::
如果你想要一些上下文:我的Python程序正在尝试发送电子邮件,而且它是最终调用getaddrinfo的电子邮件软件。
答案 0 :(得分:1)
在不起作用的框中查看/etc/hosts
。 localhost是否有条目?
还要比较/etc/nsswitch.conf
并查看是否有任何可疑内容,例如缺少“主机”行