2016-10-11 136 views
9

socket.gethostbyname(socket.gethostname())在OS X El Capitan上運行良好。但是,在Mac更新到macOS Sierra後,它現在不能工作。gaierror:[Errno 8]節點名或服務名提供,或未知(使用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 
+4

確保文件'/ etc/hosts'包含'127.0.0.1 localhost'。 –

+3

謝謝!我檢查了$ sudo nano/etc/hosts並發現127.0.0.1 localhost已經存在。還是行不通。 – FBL

+0

歡迎來到Stack Overflow!請查看我們的[SO問題清單](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)來幫助你提出一個好問題,從而得到一個很好的答案。 –

回答

3

同樣的問題。 我將代碼更改爲:

import socket 
socket.gethostbyname("") 

現在它可以工作。

+0

我不認爲這會工作,我不知道背後的技術原因,但當我嘗試這個我得到'0.0.0.0'macOS 10.12.2。我認爲它沒有查找主機名,只是返回一個默認值。 – Compunutter

+0

如果你想綁定一個tcp/http服務器的ip和端口,'0.0.0.0'就可以了。但是,如果你只是想獲得IP文本,gethostbyname不是一個好的選擇。 – jxc

9

在OP的評論中有一個基於another question, 的回答,它需要編輯/etc/hosts,即echo 127.0.0.1 $HOSTNAME >> /etc/hosts

或者,您可以使用socket.gethostbyname('localhost'),假設localhost是您需要的,並且它在/etc/hosts中定義。

相關問題