socket.getaddrinfo()の動作を再定義する必要があるプログラムを作成しています。他のいくつかの項目をインポートする第三者のライブラリを使用し、最終的にhttplib2をインポートして、ソケットをインポートします。Python - 別のライブラリによって呼び出された、別のライブラリによって呼び出されたソケットライブラリの関数の置き換え
私が読んだところでは、この方法を無効にする方法はサルのパッチを当てる方法ですが、明らかに正しい方法ではありません。
私は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'が元のモジュールへの魔法の参照となるのかはっきりしません。 – NPE
@NPE OPは元のソースコードをコピーしたばかりで、 '_socket'は' socket'がラップするCで実装された内部モジュールです。 –
@AlexHall:どこにインポートしていますか? – NPE