Python:日志记录和TCP hand

2024-05-15 14:58:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了如下TCP处理程序(改编自:https://docs.python.org/2/library/socketserver.html#socketserver-tcpserver-example):

#!/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()

它工作得很好,现在我尝试添加一个记录器:

^{pr2}$

当我运行它时,我得到以下错误:

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

我不明白给出的4个论点是什么。 除此之外,代码还有什么问题吗?在

编辑:完整回溯:

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)

Tags: infrompyimportselfclientaddressrequest
1条回答
网友
1楼 · 发布于 2024-05-15 14:58:30

MyHandlerSocketServer.StreamRequestHandler的子类,它是{}的子类。call signature of ^{}

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

回溯错误消息显示^{} method

^{pr2}$

被称为。self.RequestHandlerClassMyHandler。因此, MyHandler.__init__应该有调用签名

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

而不是

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

调用self.RequestHandlerClass(request, client_address, self)时,Python调用 以self作为第一个参数的RequestHandlerClass方法。换句话说, RequestHandlerClass(self, request, client_address, self)被调用。self, request, client_address, self是传递给MyHandler的四个参数。 错误消息

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

正在抱怨MyHandler.__init__被定义为只需要1个参数,但却被传递了4个参数。在

相关问题 更多 >