我遇到了一个Python脚本问题,应该检查用户是否连接到带有强制网络门户的wifi网络。具体来说,脚本是长时间运行的,尝试每隔60秒连接到example.org。
问题是,如果网络启动离线(意味着在脚本开头没有连接wifi),socket.getaddrinfo
将始终失败即使连接了wifi,也会出现错误“名称或服务未知”,直到重新启动Python脚本。 (这不是DNS的事情 - 所有请求都失败了。)
由于urllib
和requests
都使用sockets
,因此一旦Python进入此状态,就无法下载示例页面。
是否有解决方法或重置sockets
的方法,以便在网络出现故障后正常运行?
要清楚,这是一个复制品:
import urllib
和urllib.open("http://stackoverflow.com/")
- 按预期失败urllib.open("http://example.com/")
预期:从example.com返回HTML
实际:socket.gaierror: [Errno -2] Name or service not known
答案 0 :(得分:-1)
如果您在运行脚本时未连接到接入点,并且没有为您的设备分配IP地址socket.getaddrinfo
将失败。也许它在您运行脚本时仍然可以连接。无法解析域名,因为您未连接到网络,因此没有DNS。
当您实际连接到网络时是否会失败?脚本失败时curl http://icanhazip.com
是否有效?或者,如果您运行ifconfig
,您的设备是否有IP? (我假设你在* nix框上)。