gaierror:[Errno 8]提供nodename或servname,或者不知道(使用macOS Sierra)

时间:2016-10-11 04:41:45

标签: python sockets

socket.gethostbyname(socket.gethostname())在OS X El Capitan上运行良好。但是,在Mac更新到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

9 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:8)

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

import socket
socket.gethostbyname("")

它现在有效。

答案 2 :(得分:1)

另一个简单的解决方案是 去终端粘贴 sudo nano /etc/hosts 找到您需要的 IP 地址、IPv4 等。 添加一个新行,如 190.123.123.3 你的终端名称.local 它对我有用

答案 3 :(得分:0)

我遇到了同样的问题。我无法ping通本地主机。

  
    

ping本地主机

  
>> error ping: cannot resolve localhost: Unknown host

我更改了主机文件。

  
    

sudo nano / etc / hosts

  

将此添加到文件中(使用Tab / 4空格分隔>> 127.0.0.1 {tab / 4spaces} localhost)保存并重新启动终端。

  
    

127.0.0.1本地主机

  

要确认一切正常,请尝试ping您的本地主机

  
    

ping本地主机

  

答案 4 :(得分:0)

今天(使用MacOS Mojave)我遇到了同样的问题,并且能够使用评论中link提供的@FBL来解决它。

具体地说,我只需要转到“系统偏好设置”->“共享”并启用共享。 (我启用了打印机共享)。然后,我通过ping $HOST验证了它是否可以正常工作。之后,我能够关闭共享,并且所有内容(ping $HOSTpython -c 'import socket; print socket.gethostbysocketname(socket.gethostname()))仍然有效。

答案 5 :(得分:0)

如果您使用的是Jupyter笔记本,请尝试

IP4=str(ipaddress.ip_address(8888))
IPAddr = socket.gethostbyname(IP4)

别忘了导入ipaddress和套接字

答案 6 :(得分:0)

使用/ etc / hosts中指定的计算机名称,而不是使用localhost。

例如,/ etc / host将具有以下内容:

127.0.0.1 ET02282-MAC.local
127.0.0.1 localhost

在您的连接中,使用“ ET02282-MAC.local”

答案 7 :(得分:0)

似乎是python bug?您需要设置主机名和ipv4,然后可以对其进行修复。

import sokcet
hostname = socket.gethostname()
print(hostname)  >> samzong

# make sure do it
!echo "127.0.0.1 samzong" >> /private/etc/hosts

答案 8 :(得分:0)

我遇到了同样的问题。

macOS Catalina

版本:10.15.7

enter image description here

解决方案是::

import socket

if env == "PRODUCTION":
    ip_address = socket.gethostbyname(socket.gethostname())
else:
    ip_address = ""