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...

Другие вопросы по тегам