2016-10-11 14 views
9

socket.gethostbyname (socket.gethostname()) działało dobrze na OS X El Capitan. Jednak nie działa teraz po uaktualnieniu Maca do systemu MACOS Sierra.gaierror: [Errno 8] nodename lub servname pod warunkiem, lub nie wiadomo (z macOS Sierra)

Dzięki!

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 
+4

Upewnij się, że plik '/ etc/hosts' zawiera' 127.0.0.1 localhost'. –

+3

Dzięki! Sprawdziłem sudo nano/etc/hosts i znalazłem tam już 127.0.0.1 localhost. Wciąż nie działa. – FBL

+0

Witamy w przepełnieniu stosu! Zapoznaj się z naszą [Listą kontrolną pytań SO] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist), aby pomóc Ci zadać dobre pytanie, a tym samym uzyskać dobrą odpowiedź. –

Odpowiedz

3

Taki sam tom problemowy. zmienić kod w celu:

import socket 
socket.gethostbyname("") 

I to działa teraz.

+0

Nie sądzę, że to zadziała, nie znam przyczyny technicznej, ale kiedy próbuję tego, otrzymuję "0.0.0.0" na macOSie 10.12.2. Zakładam, że nie szuka nazwy hosta i po prostu zwraca wartość domyślną. – Compunutter

+0

Jeśli chcesz powiązać ip i port dla serwera tcp/http, "0.0.0.0" jest w porządku. Ale jeśli chcesz tylko uzyskać tekst ip, gethostbyname nie jest dobrym wyborem. – jxc

9

Jest odpowiedź w komentarzach OP w oparciu o another question, która wymaga, aby edytować /etc/hosts, tj echo 127.0.0.1 $HOSTNAME >> /etc/hosts.

Alternatywnie, można użyć socket.gethostbyname('localhost'), zakładając, że localhost to co trzeba i jest to określone w /etc/hosts.

Powiązane problemy