gaierror: [Errno 8] имя узла или имя сервера указаны или не известны (в macOS Sierra)
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
12 ответов
В комментариях ОП есть ответ на другой вопрос, который необходимо отредактировать /etc/hosts
т.е. echo 127.0.0.1 $HOSTNAME >> /etc/hosts
,
Кроме того, вы можете использовать socket.gethostbyname('localhost')
, при условии, что localhost
это то, что вам нужно, и это определено в вашем /etc/hosts
,
Та же проблема. Я изменяю код на:
import socket
socket.gethostbyname("")
И это работает сейчас.
У меня была та же проблема сегодня (с MacOS Mojave), и я смог ее исправить, используя ссылку, предоставленную FBL в комментариях.
В частности, мне просто нужно было перейти в Системные настройки -> Общий доступ и включить общий доступ. (Я включил общий доступ к принтеру). Затем я убедился, что это работает через ping $HOST
, После этого я смог снова отключить общий доступ и все ping $HOST
а также python -c 'import socket; print socket.gethostbysocketname(socket.gethostname())
) все еще работал.
Кажется ошибка питона? Вам нужно установить hostname & ipv4, после этого вы можете это исправить.
import sokcet
hostname = socket.gethostname()
print(hostname) >> samzong
# make sure do it
!echo "127.0.0.1 samzong" >> /private/etc/hosts
Вместо использования localhost используйте имя компьютера, указанное в /etc/hosts.
Например, в / etc / host будет что-то вроде этого:
127.0.0.1 ET02282-MAC.local
127.0.0.1 localhost
И в вашем соединении используйте "ET02282-MAC.local"
Другое простое решение - вставить терминал Go sudo nano /etc/hosts, найдите свой IP-адрес, который нужен, IPv4 и т.д., добавьте новую строку, например 190.123.123.3 Yourterminalname.local, это сработало для меня
Если вы используете ноутбук Jupyter или не пытаетесь это сделать
IP4=str(ipaddress.ip_address(8888))
IPAddr = socket.gethostbyname(IP4)
не забудьте импортировать ipaddress и socket
У меня была такая же проблема. Я не смог пинговать localhost.
ping localhost
>> error ping: cannot resolve localhost: Unknown host
Я изменил мой файл hosts.
sudo nano / etc / hosts
Добавьте это в файл (используйте пробелы Tab/4 для разделения >> 127.0.0.1{tab/4spaces}localhost) Сохраните его и перезапустите терминал.
127.0.0.1 localhost
Чтобы убедиться, что все работает нормально, попробуйте пинговать ваш локальный хост
ping localhost
Если локальный хост 127.0.0.1 уже существует в вашем файле /etc/hosts, попробуйте перезагрузить MacBook. Мне это помогает.
У меня была такая же проблема.
macOS Catalina
Версия: 10.15.7
Решение было:
import socket
if env == "PRODUCTION":
ip_address = socket.gethostbyname(socket.gethostname())
else:
ip_address = ""
У меня была такая же ошибка, поэтому я использовал утилиту командной строки подпроцесса, чтобы найти IP-адрес моей машины. Код, который я использовал, был:
from sys import platform
if platform == "linux" or platform == "linux2":
# linux
ip = sb.run(["ipconfig", "getifaddr", "en0"], capture_output=True)
...
elif platform == "darwin":
# OS X
ip = sb.run(["ipconfig", "getifaddr", "en0"], capture_output=True)
...
elif platform == "win32":
# Windows...
ip = sb.run(["ipconfig", "| findstr /i" "ipv4"],capture_output=True)
...
return ip.stdout.decode()
Он возвращает IPv4-адрес моей машины и работает на Windows, Mac и Linux.
Вроде очевидно, но если вы клонировали проект, который использует переменную env для вашего порта... лучше убедиться, что вы действительно настроили эти переменные env...