/Tools/compiler/dumppyc.py
http://unladen-swallow.googlecode.com/ · Python · 46 lines · 39 code · 6 blank · 1 comment · 12 complexity · 8058bdeb72380dad4951029ea46116e4 MD5 · raw file
- #! /usr/bin/env python
- import marshal
- import dis
- import types
- def dump(obj):
- print obj
- for attr in dir(obj):
- if attr.startswith('co_'):
- val = getattr(obj, attr)
- print "\t", attr, repr(val)
- def loadCode(path):
- f = open(path)
- f.read(8)
- co = marshal.load(f)
- f.close()
- return co
- def walk(co, match=None):
- if match is None or co.co_name == match:
- dump(co)
- print
- dis.dis(co)
- for obj in co.co_consts:
- if type(obj) == types.CodeType:
- walk(obj, match)
- def load(filename, codename=None):
- co = loadCode(filename)
- walk(co, codename)
- if __name__ == "__main__":
- import sys
- if len(sys.argv) == 3:
- filename, codename = sys.argv[1:]
- else:
- filename = sys.argv[1]
- codename = None
- if filename.endswith('.py'):
- buf = open(filename).read()
- co = compile(buf, filename, "exec")
- walk(co)
- else:
- load(filename, codename)