在build g-bios 时遇到的一个错误(Fixed)

发布于 2022-09-18 17:38:12 字数 2638 浏览 17 评论 0

名位在使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帅的被狗咬 2022-09-25 17:38:12

不错

满天都是小星星 2022-09-25 17:38:12

熟悉的配置窗口界面

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文