Skip to content

Instantly share code, notes, and snippets.

@tmr232
Last active August 29, 2015 14:11
Show Gist options
  • Save tmr232/46d73eab5ebe63f26739 to your computer and use it in GitHub Desktop.
Save tmr232/46d73eab5ebe63f26739 to your computer and use it in GitHub Desktop.
sys.settrace usage sample
import sys
import inspect
class Tracer(object):
def __init__(self):
self._indentation_level = 0
@property
def indentation_level(self):
return self._indentation_level
@indentation_level.setter
def indentation_level(self, value):
self._indentation_level = max(0, value)
def __enter__(self):
sys.settrace(self)
def __exit__(self, exc_type, exc_value, traceback):
sys.settrace(None)
def __call__(self, frame, event, args):
frameinfo = inspect.getframeinfo(frame)
filename = frameinfo.filename
# Use `in` instead of comparing because you need to cover for `.pyc` files as well.
if filename in __file__:
return None
if event == 'return':
self.indentation_level -= 1
elif event == 'call':
print "{}{}{}".format(" " * self.indentation_level,
frameinfo.function,
inspect.formatargvalues(*inspect.getargvalues(frame)))
self.indentation_level += 1
else:
return None
return self
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment