在build g-bios 时遇到的一个错误(Fixed)
名位在使用gbios时有没有遇到这种情况 在配置gbios时,如果主机端没有设置IP地址(eth0),
运行./build 产生Makefile 文件时 会出现以下的错误:
Traceback (most recent call last):
File "./build", line 284, in <module>
hello = MainWin()
File "./build", line 186, in __init__
self.entServer.set_text(self.default_server_ip())
File "./build", line 75, in default_server_ip
DEF_SVR_IP = self.get_ip_address('eth0')
File "./build", line 59, in get_ip_address
struct.pack('256s', ifname[:15])
IOError: [Errno 99] Cannot assign requested address
根据错误提示信息,错误是发生在 build文件里的一个叫 get_ip_address 函数里,
该函数的具体描述如下:
def get_ip_address(self, ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
经过查找,错误是由 fcntl.ioctl(s.fileno(),0x8915,struct.pack('256s',ifname[:15])这句话引起的。
注意 “IOError: [Errno 99] Cannot assign requested address”错误信息,显然这是python的一个错误异常。
我们知道c++里在发生错误的时候,经常会采用丢出异常信息来处理相应的错误,莫非python也类似于C++的错误异常捕获机制。
于是我对这部分代码作如下修改:
def get_ip_address(self, ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
localIP=fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)
except IOError:
return "192.168.0.10"
return socket.inet_ntoa(localIP[20:24])
ok, 一切大功告成。
跳出了我们熟悉的配置窗口界面。
如下图:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不错
熟悉的配置窗口界面