я написал TCP обработчик следующим образом (адаптировано из: https://docs.python.org/2/library/socketserver.html#socketserver-tcpserver-example):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: Полный TraceBack:
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)
просьба предоставить полную обратную трассировку. Кроме того, вы пропустили «я». перед logger.info (результат) – MateuszL
@MateuszL Я добавил полный backtrace и «я». – EliseB