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

FBL*_*FBL 26 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
Run Code Online (Sandbox Code Playgroud)

Arm*_*mut 23

OP的评论中有一个答案基于另一个 需要编辑的问题/etc/hosts,即echo 127.0.0.1 $HOSTNAME >> /etc/hosts.

或者,你可以使用socket.gethostbyname('localhost'),假设这localhost是你需要的,它是在你的/etc/hosts.


小智 10

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

import socket
socket.gethostbyname("")
Run Code Online (Sandbox Code Playgroud)

它现在有效.

  • 我认为这行不通,我不知道背后的技术原因,但是当我尝试这样做时,我在 macOS 10.12.2 上得到了“0.0.0.0”。我认为它不是在查找主机名,而只是返回一个默认值。 (2认同)

Chr*_*him 5

我今天遇到了同样的问题(使用 MacOS Mojave),并且能够使用@FBL在评论中提供的链接修复它。

具体来说,我只需进入“系统偏好设置”->“共享”并启用共享。(我启用了打印机共享)。然后我验证它正在通过ping $HOST. 之后,我能够关闭共享,并且一切(和ping $HOSTpython -c 'import socket; print socket.gethostbysocketname(socket.gethostname())仍然有效。