2
로깅을위한 파이썬 문서에 표시된 예제 코드를받는 데 문제가 있습니다. 아래 표시된 코드는 수신 된 모든 데이터 그램에서 EOFError 예외를 발생시킵니다. 파이썬 로깅 데이터 그램 핸들러
import socket
import logging
import cPickle
import struct
import sys
sock = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)
sock.bind (('localhost', 9000))
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter("UDP LogViewer %(asctime)s %(message)s"))
logger = logging.getLogger("Test")
logger.addHandler(handler)
try:
while True:
dgram_size = sock.recv(4)
if len(dgram_size) < 4:
break
slen = struct.unpack(">L", dgram_size)[0]
data = sock.recv(slen)
while len(data) < slen:
data = data + sock.recv(slen - len(data))
try:
obj = cPickle.loads(data)
record = logging.makeLogRecord(obj)
logger.handle(record)
except:
print "exception", sys.exc_info()[0]
finally:
sock.close()
그러나이 코드가 작동
, 어떤 아이디어data, address = sock.recvfrom(8192)
rec = logging.makeLogRecord(cPickle.loads(data[4:]))
logger.handle(rec)
감사
감사합니다 sarnold, 나는 그 소용돌이를 줄 것입니다 – mikip
건배 sarnold, 많이 감사합니다 – mikip