2016-10-19 6 views
0

次のように私は(:https://docs.python.org/2/library/socketserver.html#socketserver-tcpserver-exampleから適応):私のTCPハンドラを書いたPythonの:伐採やTCPハンドラ

#!/usr/bin/env python 
# -*- coding: UTF-8 -*- 

import SocketServer 

from MyModule import myFunction 

class MyHandler(SocketServer.StreamRequestHandler): 

    def handle(self): 
     self.data = self.rfile.readline().strip() 
     result = myFunction(self.data) 
     self.wfile.write(result) 

if __name__ == "__main__": 
    HOST, PORT = myhost, myport 
    server = SocketServer.TCPServer((HOST, PORT), MyHandler) 
    server.serve_forever() 

私がロガーを追加しようとしている完璧と動作するようになりました:

#!/usr/bin/env python 
# -*- coding: UTF-8 -*- 

import SocketServer 
import logging 
from logging.handlers import TimedRotatingFileHandler 

from MyModule import myFunction 

class MyHandler(SocketServer.StreamRequestHandler): 

    def __init__(self): 
     self.logger = logging.getLogger() 
     self.logger.setLevel(logging.DEBUG) 
     self.formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s') 
     self.file_handler = TimedRotatingFileHandler('my_log_file.log', when='D', interval=1, utc=True) 
     self.file_handler.setLevel(logging.DEBUG) 
     self.file_handler.setFormatter(self.formatter) 
     self.logger.addHandler(self.file_handler) 

    def handle(self): 
     self.data = self.rfile.readline().strip() 
     result = myFunction(self.data) 
     self.wfile.write(result) 

     self.logger.info(result) 

if __name__ == "__main__": 
    HOST, PORT = myhost, myport 
    server = SocketServer.TCPServer((HOST, PORT), MyHandler) 
    server.serve_forever() 

TypeError: __init__() takes exactly 1 argument (4 given)

:私はそれを実行すると

は、私は次のエラーを取得します私は与えられた4つの議論が何であるか分かりません。 それ以外のコードに問題はありますか?

EDIT:フルトレースバック:

Exception happened during processing of request from ('MyIP', 54028) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock 
    self.process_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request 
    self.finish_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
TypeError: __init__() takes exactly 1 argument (4 given) 
+0

完全バックトレースを提供してください。また、あなたは "自己"を逃した。 before logger.info(result) – MateuszL

+0

@MateuszL私は完全バックトレースと "self"を追加しました。 – EliseB

答えて

2

MyHandlerBaseRequestHandlerのサブクラスであるSocketServer.StreamRequestHandlerのサブクラスです。 call signature of BaseRequestHandler.__init__は、トレースバックエラーメッセージがBaseServer.finish_request method

self.RequestHandlerClass(request, client_address, self) 

内部と呼ばれていることを示している

def __init__(self, request, client_address, server): 

あります。 self.RequestHandlerClassMyHandlerです。 self.RequestHandlerClass(request, client_address, self)が呼び出されるとしたがって、 MyHandler.__init__

class MyHandler(SocketServer.StreamRequestHandler): 
    def __init__(self, request, client_address, server): 

代わりに

class MyHandler(SocketServer.StreamRequestHandler): 
    def __init__(self): 

コールサインを有していなければならない、Pythonはその最初の引数としてselfRequestHandlerClassメソッドを呼び出します。つまり、 RequestHandlerClass(self, request, client_address, self)が呼び出されます。 self, request, client_address, selfは、MyHandlerに渡される4つの引数です。

TypeError: __init__() takes exactly 1 argument (4 given) 

MyHandler.__init__が1つだけ引数を期待するように定義された、まだそれが4つの引数が渡されたことを訴えているエラーメッセージ。

+0

良い点、自己、自己.... – dsgdfg