Python: urllib2 错误 "Name or server not known"
Python: urllib2 error "Name or server not known"
我有一个脚本可以检查当地天气并输出带有条件的字符串。
该脚本在我的 Mac 上工作正常,但是当我在我的 Raspberry Pi 上通过 SSH 运行 它时 returns 这个错误:
urllib2.URLError: <urlopen error [Errno -2] Name or service not known>
这是返回错误的脚本部分:
import urllib2
import json
import fnmatch
key='xxxxxxxxxxxxxxxx'
url='http://api.wunderground.com/api/%s/geolookup/conditions/q/PA/%s.json' %(key, zipCode)
f=urllib2.urlopen(url)
json_string = f.read()
parsed_json=json.loads(json_string)
city=parsed_json['location']['city']
state=parsed_json['location']['state']
weather=parsed_json['current_observation']['weather']
temperature = parsed_json['current_observation']['temperature_string']
report=("The current weather in " + str(city) + " " + str(state) + " is " + str(weather.lower()) + " and " + str(temperature)).replace("F (","degrees fahrenheit or ").replace("C)","degrees celsius")
return report
这里是完整的错误:
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 77, in <module>
opening()
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 52, in opening
wait(alarmtime, platform, sound, zipCode)
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 75, in wait
alarm(platform, sound, zipCode)
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 58, in alarm
say=Wunder(zipCode)
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 12, in Wunder
f=urllib2.urlopen(url)
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 401, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 419, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 379, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1211, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1181, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno -2] Name or service not known>
我正在使用 Wunderground 的 API 获取天气预报。
更新
感谢一些评论者,我发现问题是当我输入时:
curl api.wunderground.com
在 RPi 的命令行中,它 returns can't resolve hostname
。虽然它在我的 Mac 上运行良好。有什么问题?
此外,这是一天前在我的 Pi 和 Mac 上工作的。
问题是你的rasberry-pi无法解析域名http://api.wunderground.com
。这可能有两个原因。
- 它没有连接到互联网(直接 wifi/ethernet 或共享连接)
- 它的 DNS 服务器没有配置,所以它不知道联系谁来将域名解析为 IP 地址
如果您确定您的 RPi 已连接到互联网,我会通过 ping google.com 然后从您的 RPi ping 8.8.8.8(public DNS 服务器)来测试理论 2。
有时,您在不知情的情况下使用了代理:
您应该检查代理环境变量:
$ env | grep -i proxy
http_proxy=http://someip:1757
https_proxy=https://someip:1757
如果您没有代理,请检查您的 .bashrc 并删除它们的定义。 (我的情况:这是从另一个桌面 .bashrc 剪切和粘贴的错误)。
我有一个脚本可以检查当地天气并输出带有条件的字符串。
该脚本在我的 Mac 上工作正常,但是当我在我的 Raspberry Pi 上通过 SSH 运行 它时 returns 这个错误:
urllib2.URLError: <urlopen error [Errno -2] Name or service not known>
这是返回错误的脚本部分:
import urllib2
import json
import fnmatch
key='xxxxxxxxxxxxxxxx'
url='http://api.wunderground.com/api/%s/geolookup/conditions/q/PA/%s.json' %(key, zipCode)
f=urllib2.urlopen(url)
json_string = f.read()
parsed_json=json.loads(json_string)
city=parsed_json['location']['city']
state=parsed_json['location']['state']
weather=parsed_json['current_observation']['weather']
temperature = parsed_json['current_observation']['temperature_string']
report=("The current weather in " + str(city) + " " + str(state) + " is " + str(weather.lower()) + " and " + str(temperature)).replace("F (","degrees fahrenheit or ").replace("C)","degrees celsius")
return report
这里是完整的错误:
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 77, in <module>
opening()
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 52, in opening
wait(alarmtime, platform, sound, zipCode)
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 75, in wait
alarm(platform, sound, zipCode)
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 58, in alarm
say=Wunder(zipCode)
File "/home/pi/Desktop/Programming/Python/WeatherAlarm.py", line 12, in Wunder
f=urllib2.urlopen(url)
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 401, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 419, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 379, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1211, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1181, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno -2] Name or service not known>
我正在使用 Wunderground 的 API 获取天气预报。
更新
感谢一些评论者,我发现问题是当我输入时:
curl api.wunderground.com
在 RPi 的命令行中,它 returns can't resolve hostname
。虽然它在我的 Mac 上运行良好。有什么问题?
此外,这是一天前在我的 Pi 和 Mac 上工作的。
问题是你的rasberry-pi无法解析域名http://api.wunderground.com
。这可能有两个原因。
- 它没有连接到互联网(直接 wifi/ethernet 或共享连接)
- 它的 DNS 服务器没有配置,所以它不知道联系谁来将域名解析为 IP 地址
如果您确定您的 RPi 已连接到互联网,我会通过 ping google.com 然后从您的 RPi ping 8.8.8.8(public DNS 服务器)来测试理论 2。
有时,您在不知情的情况下使用了代理:
您应该检查代理环境变量:
$ env | grep -i proxy
http_proxy=http://someip:1757
https_proxy=https://someip:1757
如果您没有代理,请检查您的 .bashrc 并删除它们的定义。 (我的情况:这是从另一个桌面 .bashrc 剪切和粘贴的错误)。