Chinaunix

标题: 在build g-bios 时遇到的一个错误(Fixed) [打印本页]

作者: tigermmx    时间: 2009-05-28 15:20
标题: 在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, 一切大功告成。

跳出了我们熟悉的配置窗口界面。
如下图:

g-bios_build.jpg (33.49 KB, 下载次数: 21)

g-bios_build.jpg

作者: dsdsdds    时间: 2009-06-09 11:16
不错
作者: 我是8戒    时间: 2009-06-09 11:32
标题: 熟悉的配置窗口界面
熟悉的配置窗口界面




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2