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
在 macOS Sierra 及更高版本中,由于网络配置的更改,socket.gethostbyname(socket.gethostname()) 可能无法正常工作。取而代之的是,你可以尝试使用以下方法之一来获取主机的 IP 地址:
socket.gethostbyname(socket.gethostname())
方法 1:使用 socket.gethostbyname_ex()
socket.gethostbyname_ex()
import socket hostname = socket.gethostname() ip_address = socket.gethostbyname_ex(hostname)[-1][0] print(ip_address)
方法 2:使用 socket.getaddrinfo()
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 地址。
如果上述方法仍无法解决问题,可能是由于网络配置或其他问题导致。在这种情况下,建议检查你的网络设置和主机名解析配置,确保正确配置并正常运行。