发生这种情况是因为无法解析DNS名称“ www.google.com”。如果没有互联网连接,则可能无法访问DNS服务器来解析此条目。
看来我是第一次误读你的问题。在Linux上,您描述的行为是glibc的特性。加载时,它仅读取一次“
/etc/resolv.conf”。可以通过
res_init()函数强制glibc重新读取“ /etc/resolv.conf” 。
一种解决方案是包装
res_init()函数并在调用之前调用
getaddrinfo()它(间接使用
urllib2.urlopen()。
您可以尝试以下 *** 作(仍然假设您使用的是Linux):
import ctypeslibc = ctypes.cdll.LoadLibrary('libc.so.6')res_init = libc.__res_init# ...res_init()response = urllib2.urlopen('http://www.google.com')
当然,可以通过在调用之前等待“ /etc/resolv.conf”被修改来优化此方法
res_init()。
另一个解决方案是安装例如nscd(名称服务缓存守护程序)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)