logexample.py使用logging.handlers.DatagramHandler在网络上进行日志记录,它会发送(协议1)它发送的数据。
logserver.py应该是unpickle并打印到屏幕,但它会引发错误。如果我使用pickle.loads然后KeyError:'\ x00'如果我使用cPickle.loads它是一个EOFError
文件在这里 - http://gist.github.com/542543
Python版本2.6.5
为什么会这样?
-------------------------- THE FIX ------------------- --------
对于其他可能感兴趣的人,这里是固定处理程序
class LogHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request[0]
socket = self.request[1]
out = pickle.loads(data[4:])
record = logging.makeLogRecord(out)
print record.msg
答案 0 :(得分:0)
在如何使用DataGramHandler的文档中有example - 它表明数据报可以通过多个数据包发送,需要在接收端重新组装。第一个数据包的前四个字节是长度 - 您将其传递给pickle.loads以及pickle数据。请改用示例代码。