File: logger.py

package info (click to toggle)
pype 2.5-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 832 kB
  • ctags: 953
  • sloc: python: 9,007; makefile: 54
file content (76 lines) | stat: -rw-r--r-- 2,125 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

import time
import sys
import wx
import cStringIO
import Queue

class pseudo_logger:
    def __init__(self):
        self.buffer = cStringIO.StringIO()
        self.softspace = 0
        self.lg = 1
        self.lt = None
        sys.stdout = self
        sys.stderr = self

    def write(self, data):
        ## print >>sys.__stdout__, repr(data), self.softspace
        if self.lg and self.lt != time.asctime():
            self.lt = time.asctime()
            x = '[ %s ] '%self.lt
            self.buffer.write(x)
            sys.__stdout__.write(x)
        
        self.lg = data[-1:] == '\n'
        x = data.replace('\r', '').replace('\n', '\r\n')
        self.buffer.write(x)
        sys.__stdout__.write(x.encode('utf8'))
    
    def flush(self):
        sys.__stdout__.flush()

l = pseudo_logger()

class logger(wx.TextCtrl):
    def __init__(self, parent):
        wx.TextCtrl.__init__(self, parent, -1, style=wx.TE_READONLY|wx.TE_MULTILINE|wx.TE_RICH)
        self.softspace = 0
        self.lg = 1
        self.lt = None
        sys.stdout = self
        sys.stderr = self
        l.buffer.seek(0)
        self.AppendText(l.buffer.read())
        del globals()['l']
        self.data = Queue.Queue()
    
    def write(self, data):
        ## print >>sys.__stdout__, repr(data), self.softspace
        if self.lg and self.lt != time.asctime():
            self.lt = time.asctime()
            x = '[ %s ] '%self.lt
            self.data.put(x)
            try:
                sys.__stdout__.write(x)
            except:
                pass
            
        self.lg = data[-1:] == '\n'
        x = data.replace('\r', '').replace('\n', '\r\n')
        self.data.put(x)
        try:
            sys.__stdout__.write(data.encode('utf8'))
        except:
            pass
        wx.CallAfter(self.handle_writes)
    
    def flush(self):
        try:
            sys.__stdout__.flush()
        except:
            pass
    
    def handle_writes(self):
        while self.data.qsize():
            self.AppendText(self.data.get())