我正在编写一个程序,需要重新定义socket.getaddrinfo()的工作方式。我使用第三方库,导入其他几个项目,最终导入httplib2,然后导入套接字。
从我所读过的内容来看,猴子补丁是覆盖这种方法的方法,但我显然没有做到这一点。
我试过这个我的函数my_getaddrinfo。现在它只使用默认代码
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()
最终发生的是我收到错误"名称_socket未定义"。我有点迷失在这里。任何帮助都会很棒。感谢。
答案 0 :(得分:1)
仔细查看socket
的源代码,了解_socket
的来源 - 您需要import _socket
。
答案 1 :(得分:1)
在def my_getaddrinfo
内,在使用_socket
之前,您可以执行from socket import _socket
,而且应该这样做。
答案 2 :(得分:0)
感谢您的帮助。我首先回答了这个问题。
我想我会发布工作代码。这是上面编辑的功能。
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