1

ソケットを介して解析されているデータを収集しようとしています。これが私のコードです:

import pickle
import SocketServer

class SocketReciever(SocketServer.BaseRequestHandler):

    def handle(self):
        sint = self.request.makefile('rb')
        objectt = pickle.load(sint)
        #print(objectt)
        ParentClassCall(objectt)

if __name__ == "__main__":
    HOST, PORT = "localhost", 60

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), SocketReciever)
    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

data=[]
def ParentClassCall(currentdata):
    data.append(currentdata)

私の質問は、SocketRecieverクラス内からParentClassCall関数をどのように呼び出すかです。

この方法はセキュリティの問題に悩まされていることは知っていますが、インターネットにアクセスできないコンピューターで実行されます。

4

2 に答える 2

2

PythonParentClassCall()は行で停止するため、定義に到達することはありませんserver.serve_forever()。メインスタンザの前に関数を定義します。

于 2013-02-07T18:29:55.037 に答える
2

問題を示すために、例の簡略化したバージョンを次に示します。

class Foo(object):

  def __init__(self):
    pass

  def do_something(self):
    not_yet_defined_function()

if __name__ == "__main__":
  foo = Foo()
  foo.do_something()

def not_yet_defined_function():
  print "It worked!"

結果は同じです:

Traceback (most recent call last):
  File "tmp.py", line 11, in <module>
    foo.do_something()
  File "tmp.py", line 7, in do_something
    not_yet_defined_function()

問題は、関数が定義される前に関数にアクセスしようとしていることです。Pythonインタープリターはファイルを順番に読み取り、コマンドを順番に実行します。classおよびキーワードは、def(クラスおよび関数)オブジェクトを作成する単なるコマンドです。したがって、使用を開始する前に、すべてのオブジェクトを定義していることを確認する必要があります。

例を変更して最初に関数を定義するには、次のようにします。

class Foo(object):

  def __init__(self):
    pass

  def do_something(self):
    not_yet_defined_function()

def not_yet_defined_function():
  print "It worked!"

if __name__ == "__main__":
  foo = Foo()
  foo.do_something()

次に、必要な結果が得られます。

lap:~$ python tmp2.py
It worked!
于 2013-02-07T18:35:45.853 に答える