/Tools/compiler/dumppyc.py

http://unladen-swallow.googlecode.com/ · Python · 46 lines · 39 code · 6 blank · 1 comment · 12 complexity · 8058bdeb72380dad4951029ea46116e4 MD5 · raw file

  1. #! /usr/bin/env python
  2. import marshal
  3. import dis
  4. import types
  5. def dump(obj):
  6. print obj
  7. for attr in dir(obj):
  8. if attr.startswith('co_'):
  9. val = getattr(obj, attr)
  10. print "\t", attr, repr(val)
  11. def loadCode(path):
  12. f = open(path)
  13. f.read(8)
  14. co = marshal.load(f)
  15. f.close()
  16. return co
  17. def walk(co, match=None):
  18. if match is None or co.co_name == match:
  19. dump(co)
  20. print
  21. dis.dis(co)
  22. for obj in co.co_consts:
  23. if type(obj) == types.CodeType:
  24. walk(obj, match)
  25. def load(filename, codename=None):
  26. co = loadCode(filename)
  27. walk(co, codename)
  28. if __name__ == "__main__":
  29. import sys
  30. if len(sys.argv) == 3:
  31. filename, codename = sys.argv[1:]
  32. else:
  33. filename = sys.argv[1]
  34. codename = None
  35. if filename.endswith('.py'):
  36. buf = open(filename).read()
  37. co = compile(buf, filename, "exec")
  38. walk(co)
  39. else:
  40. load(filename, codename)