#! /usr/bin/env python import marshalimport osimport disimport 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)
#! /usr/bin/env python
import marshal
import os
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)