我希望这不会越境进入超级用户的领土。
所以,我有一个嵌入式Linux,在系统进程很自然剥离。 我不是哪个系统进程监视器相当肯定物理层,而在网络电缆插入启动DHCP客户端,但我做了一个自己。 ¨问题是,如果我有一个python脚本,使用HTTP连接,运行之前,我有一个IP地址,它永远不会得到一个连接。 即使我有一个合法的IP,蟒蛇仍具有
“在名称解析临时错误”
所以,我怎么能得到实现提供新的连接,而不需要重新启动脚本中的蟒蛇?
另外,我错过了一些正常的程序运行Linux通常在网络电缆连接。
我使用DHCP客户端是使用udhcpc和Python版本是2.6。 使用httplib的用于连接。
听起来像httplib的缓存/etc/resolv.conf
的DHCP客户端获取IP,之后被更新。
你可能会考虑写一个等待,直到获得IP地址的包装脚本,然后调用你的Python脚本。
或者,你可以尝试,你的Python脚本中,直到你已经获得一个IP地址,而不是打开任何套接字连接/etc/resolv.conf
更新。
编辑
httplib的使用socket.create_connection()
其中,经过一番搜索, 我发现确实缓存 /etc/resolv.conf
。 (嗯,看来libc中的嵌入式版本实际上是在做缓存)。
你可以尝试SugarLabs'的解决方案 ,虽然我不能给它的有效性说话。
它可能是蟒蛇模块之一是缓存网络的状态,所以它没有使用最新的设置。 尝试并重新加载所有网络相关的模块。 这方面的一个简单的例子是:
import sys, socket, urllib
for i in [sys, socket, urllib]:
reload(i)
如果不工作四顾sys.modules
,看看还有什么得到了进口,并尝试更多的模块那里。 重装的一个更极端的版本将下面的代码,你可以尝试作为最后的努力。
码
import sys
print 'reloading %s modules ' % len(sys.modules)
for name, module in sys.modules.items():
try:
reload(module)
except:
print 'failed to import %s' % name
产量
reloading 42 modules
failed to import __main__
failed to import encodings.encodings
failed to import encodings.codecs
failed to import lazr
failed to import encodings.__builtin__
很多进一步的研究之后,glibc的问题jedwards建议,似乎是这个问题。 我没有找到一个解决方案,但对于我的用例提出的解决方法。 考虑到我只用一个网址,我说我自己的“resolv.file”。 当PHY报告连接的一个小型的守护进程获取URL的IP地址。 该IP被保存到“我自己的resolv.conf”。 从这个文件中的python脚本获取IP使用上岗。
不是一个真正的很好的解决方案,而是一个解决方案。