小能豆

gaierror: [Errno 8] nodename nor servname provided, or not known (with macOS Sierra)

python

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

阅读 112

收藏
2023-06-04

共1个答案

小能豆

在 macOS Sierra 及更高版本中,由于网络配置的更改,socket.gethostbyname(socket.gethostname()) 可能无法正常工作。取而代之的是,你可以尝试使用以下方法之一来获取主机的 IP 地址:

方法 1:使用 socket.gethostbyname_ex()

import socket

hostname = socket.gethostname()
ip_address = socket.gethostbyname_ex(hostname)[-1][0]

print(ip_address)

方法 2:使用 socket.getaddrinfo()

import socket

hostname = socket.gethostname()
ip_address = socket.getaddrinfo(hostname, None, socket.AF_INET)[-1][-1][0]

print(ip_address)

这些方法将返回主机的第一个 IP 地址。请注意,如果主机有多个 IP 地址,你可能需要进一步处理以选择合适的 IP 地址。

如果上述方法仍无法解决问题,可能是由于网络配置或其他问题导致。在这种情况下,建议检查你的网络设置和主机名解析配置,确保正确配置并正常运行。

2023-06-04