34 lines
896 B
Python
34 lines
896 B
Python
|
import os
|
||
|
import threading
|
||
|
import re
|
||
|
|
||
|
|
||
|
class LogPipe(threading.Thread):
|
||
|
|
||
|
def __init__(self, logger):
|
||
|
threading.Thread.__init__(self)
|
||
|
self.daemon = False
|
||
|
self.logger = logger
|
||
|
self.read_fd, self.write_fd = os.pipe()
|
||
|
self.stop = threading.Event()
|
||
|
self.start()
|
||
|
|
||
|
def fileno(self):
|
||
|
return self.write_fd
|
||
|
|
||
|
def run(self):
|
||
|
self.logger("Logging thread started.")
|
||
|
with os.fdopen(self.read_fd) as f:
|
||
|
for line in iter(f.readline, ""):
|
||
|
line = re.sub(r'^\d+/\d+/\d+ \d+:\d+:\d+ ', '', line)
|
||
|
self.logger(line.strip())
|
||
|
if self.stop.is_set():
|
||
|
break
|
||
|
self.logger("Logging thread finished.")
|
||
|
|
||
|
def close(self):
|
||
|
self.stop.set()
|
||
|
f = os.fdopen(self.write_fd, "w")
|
||
|
f.write("Stopping logging thread...\n")
|
||
|
f.close()
|