> Chris Angelico wrote: [Helpful stuff]
I'm actually trying to implement a SocketHandler for a Python logger. However, I can't get my handler on the client side to send anything. Do I need to subclass logging.SocketHandler and fill the various methods with meaning? The documentation doesn't say so. I've noticed that when the server is not running, logging.SocketHandler creates the socket. I don't understand why it would; isn't it the server's job to create the socket? ################## CLIENT ############################ import socket import pickle from logging import getLogger from logging.handlers import SocketHandler SOCKET = '/tmp/test.socket' # This doesn't send anything to the socket _log = getLogger(__name__) _log.addHandler(SocketHandler(None, SOCKET)) _log.error('Logging something') # String gets sent to socket sock = socket.socket(socket.AF_UNIX) sock.connect(SOCKET) sock.send(b"Hello, world") sock.close() # Pickled object works fine sock = socket.socket(socket.AF_UNIX) sock.connect(SOCKET) sock.send(pickle.dumps(dict(a=1))) sock.close() ################## SERVER ############################ import os import pickle from socketserver import UnixStreamServer, StreamRequestHandler SOCKET = '/tmp/test.socket' class Handler(StreamRequestHandler): def handle(self): data = self.rfile.read() try: obj = pickle.loads(data) except: print('Unpickled: ', data) else: print('Pickled: ', type(obj)) if os.path.exists(SOCKET): os.unlink(SOCKET) with UnixStreamServer(SOCKET, Handler) as server: server.serve_forever() -- https://mail.python.org/mailman/listinfo/python-list