Staging
v0.5.1
https://github.com/python/cpython
Raw File
Tip revision: 0ae7228f68d0a1f70aab4d4e6023dfd62f1766be authored by cvs2svn on 13 May 2004, 05:34:43 UTC
This commit was manufactured by cvs2svn to create tag 'r234c1'.
Tip revision: 0ae7228
dumppyc.py
#! /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):
    if path[-1] == "c":
        f = open(path)
        f.read(8)
        co = marshal.load(f)
        f.close()
        return co
    else:
        return compile(open(path).read(), path, "exec")

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 main(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') and os.path.exists(filename+"c"):
        filename += "c"
    main(filename, codename)
back to top