0

編集:私はapply()セキュリティ競争のために、ピクルスの悪用のために非推奨を使用しています。applypickle命令文字列を使用してメソッドを呼び出す方法のようです。しかし、もっと良い方法を知っていただければ幸いです。

でメソッドapply()を呼び出そうとしていますが、奇妙なエラーメッセージが表示されます。send()socket._socketobject

In [130]: client
Out[130]: <socket._socketobject at 0x108d0bfa0>

In [131]: apply(socket._socketobject.send, (client, "stuff"))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-131-3f9b1f1de824> in <module>()
----> 1 apply(socket._socketobject.send, (client, "stuff"))

TypeError: 'member_descriptor' object is not callable

興味深いことに、send()これは関数型であり、次のように呼び出すことができます。

In [128]: client.send
Out[128]: <function send>

In [129]: client.send("stuff")
Out[129]: 5

これは、私が最初にclientという名前のソケットオブジェクトを取得した方法です。

In [107]: import signal

In [108]: sock = socket.socket()

In [109]: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

In [110]: sock.bind(('0.0.0.0', 1025))

In [111]: sock.listen(10)

In [112]: signal.signal(signal.SIGCHLD, signal.SIG_IGN)
Out[112]: 0
In [113]: client, addr = sock.accept()

どんな助けでも大歓迎です!

4

1 に答える 1

2

興味深いことに、send()は関数型です

正しくない。記述子であるため、メソッドから関数をsend 返します。実際の関数を呼び出す場合は、記述子プロトコルを自分でインターフェースする必要があります。__get__()

>>> dir(socket._socketobject.send)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> type(socket._socketobject.send)
<type 'member_descriptor'>
于 2012-12-29T02:48:12.750 に答える