代码之家  ›  专栏  ›  技术社区  ›  Nross2781

Python-替换套接字库中由另一个库调用的函数,该库由另一个库调用

  •  0
  • Nross2781  · 技术社区  · 8 年前

    我正在编写一个程序,需要重新定义套接字的方式。getaddrinfo()可以工作。我使用了一个第三方库,它导入了其他几个项目,最终导入了httplib2,然后导入了socket。

    def my_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
    addrlist = []
    
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
        af, socktype, proto, canonname, sa = res
        addrlist.append((_intenum_converter(af, AddressFamily),_intenum_converter(socktype, SocketKind),proto, canonname, sa))
    
    return addrlist
    
    import socket
    socket.getaddrinfo = my_getaddrinfo
    
    #Third party library I'm trying to use
    from Otherlibrary.test import testconnector
    connector = testconnector(initvalue)
    connector.do()
    

    最终发生的是,我得到了错误“name \u socket not defined”。我有点迷路了。任何帮助都会很好。谢谢

    3 回复  |  直到 8 年前
        1
  •  1
  •   user1785721 user1785721    8 年前

    在您的 def my_getaddrinfo _socket 你能做到的 from socket import _socket 这样就可以了。

        2
  •  1
  •   Alex Hall    8 年前

    socket _socket 来自-你需要 import _socket .

        3
  •  0
  •   Alex Hall    8 年前

    我想我应该发布工作代码。这是上面编辑的函数。

    def my_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
        addrlist = []
    
        from socket import _socket
        from socket import _intenum_converter
        from socket import AddressFamily
        from socket import SocketKind
    
        for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
            af, socktype, proto, canonname, sa = res
            addrlist.append((_intenum_converter(af, AddressFamily),_intenum_converter(socktype, SocketKind),proto, canonname, sa))
    
        return addrlist