1 import copy
2 import string
3 import sys
4 import time
5
7 """Generic debugger class
8 @ivar level: attribute, representing debug level (higher means more messages)
9 """
12
14 """Sends debug messages to the appropriate medium. Override
15 the L{display} method to use different medium
16 """
17 if level > 10 - self.level:
18 self.display(str)
19
21 """Output method. If not overridden, uses standard output"""
22 print str
23 sys.stdout.flush()
24
31
33 return self + (-delta)
34
36 if isinstance(other,Debugger):
37 return self.level.__cmp__(other.level)
38 else:
39 return self.level.__cmp__(other)
40
42 return 'Debugger ('+`self.level`+')'
43
45 return self.__class__(self.level)
46
51
54
55
58
60 self.reset
61 return string.join(self.results,'\n')
62
64 debug = self.__class__(self.level)
65 debug.results = self.results
66 return debug
67
71
73 newTime = time.time()
74 diff = int((newTime-self.lastTime)*1000.0)
75 if diff > 0:
76 newStr = str + ' ('+`diff`+' ms)'
77 else:
78 newStr = str
79 self.lastTime = time.time()
80 AccumulateDebugger.display(self,newStr)
81
85
87 debug = self.__class__(self.level)
88 debug.results = self.results
89 debug.lastTime = self.lastTime
90 return debug
91
93 import hotshot,hotshot.stats
94 filename = '/tmp/stats'
95 prof = hotshot.Profile(filename)
96 prof.start()
97 apply(cmd,args)
98 prof.stop()
99 prof.close()
100 stats = hotshot.stats.load(filename)
101 stats.strip_dirs()
102 stats.sort_stats('time', 'calls')
103 stats.print_stats()
104