我的Python代码非常简单,在ArduinoYún上创建的网页上发出GET请求。
import httplib
conn = httplib.HTTPConnection("yun.local")
conn.request("GET", "/arduino/read/temp/0")
r1 = conn.getresponse()
print r1.status, r1.reason, r1.read()
当我在ArduinoYún的Linux端运行时,出现以下错误 socket.gaierror:[Errno -2]名称或服务未知。但是,当我在Mac上运行相同的脚本时,它运行正常。
我通过将HTTPConnection参数更改为 httplib.HTTPConnection(“192.168.240.1”)来解决此问题,这是来自Arduino Yun的IP。
那么,为什么这个错误出现在Arduino的Linux端而不是我的Mac?
感谢。
答案 0 :(得分:12)
来自Python的socket.gaierror
无法运行getaddrinfo()
或getnameinfo()
。在你的情况下,它可能是第一个。该函数接受主机和端口,并返回元组列表,其中包含有关如何连接到主机的信息。如果您为该功能提供主机名,则会尝试解决下面更深层次的IP地址。
因此,错误应该来自Python无法将您编写的地址(yun.local
)解析为有效的IP地址。我建议你在设备上查看/etc/hosts
以查看它是否在那里定义。您也可以尝试使用命令行工具,例如host
或telnet
,以检查解析:
例如:
[pugo@q-bert ~]$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
它设法将我的localhost
解析为::1
(IPv6)和127.0.0.1
(IPv4),因为它存在于/etc/resolv.conf
中。如果我试着和你的主人一起试试:
[pugo@q-bert ~]$ telnet yun.local 80
telnet: could not resolve yun.local/80: Name or service not known
答案 1 :(得分:0)
在我的情况下,我更改了主机名。所以我意识到/ etc / hosts仍然是旧主机名,我刚刚更新到/ etc / hosts文件中的新主机名,这对我有用。