2016-10-11 128 views
9

socket.gethostbyname(socket.gethostname())在OS X El Capitan上运行良好。但是,在Mac更新到macOS Sierra后,它现在不能工作。gaierror:[Errno 8]节点名或服务名提供,或未知(使用macOS Sierra)

谢谢!

import socket 
socket.gethostbyname(socket.gethostname()) 

Traceback (most recent call last): 
    File "<pyshell#26>", line 1, in <module> 
    socket.gethostbyname(socket.gethostname()) 
gaierror: [Errno 8] nodename nor servname provided, or not known 
+4

确保文件'/ etc/hosts'包含'127.0.0.1 localhost'。 –

+3

谢谢!我检查了$ sudo nano/etc/hosts并发现127.0.0.1 localhost已经存在。还是行不通。 – FBL

+0

欢迎来到Stack Overflow!请查看我们的[SO问题清单](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)来帮助你提出一个好问题,从而得到一个很好的答案。 –

回答

3

同样的问题。 我将代码更改为:

import socket 
socket.gethostbyname("") 

现在它可以工作。

+0

我不认为这会工作,我不知道背后的技术原因,但当我尝试这个我得到'0.0.0.0'macOS 10.12.2。我认为它没有查找主机名,只是返回一个默认值。 – Compunutter

+0

如果你想绑定一个tcp/http服务器的ip和端口,'0.0.0.0'就可以了。但是,如果你只是想获得IP文本,gethostbyname不是一个好的选择。 – jxc

9

在OP的评论中有一个基于another question, 的回答,它需要编辑/etc/hosts,即echo 127.0.0.1 $HOSTNAME >> /etc/hosts

或者,您可以使用socket.gethostbyname('localhost'),假设localhost是您需要的,并且它在/etc/hosts中定义。

相关问题