Joan Miller wrote: > When a package is imported, it gets the dosctring to store it in > *__doc__*. > > Does that funcion is built in python? because I would want use it to > get the docstring without import a package
Something to get you started: import ast def walk(root, stack): for node in ast.iter_child_nodes(root): if isinstance(node, (ast.FunctionDef, ast.ClassDef)): yield node stack.append(node) for child in walk(node, stack): yield child del stack[-1] def get_name(node): try: return node.name except AttributeError: return "(%s)" % node.__class__.__name__ def get_path(path): return ".".join(get_name(node) for node in path) def find_docstrings(filename): with open(filename) as f: module = ast.parse(f.read()) print filename.center(len(filename) + 2).center(80, "=") print ast.get_docstring(module) print "=" * 80 print path = [] for node in walk(module, path): s = ast.get_docstring(node) if s is not None: name = get_path(path + [node]) print name.center(len(name) + 2).center(80, "-") print s print if __name__ == "__main__": import sys args = sys.argv[1:] if args: for arg in args: find_docstrings(arg) else: find_docstrings("/usr/lib/python2.6/unittest.py") assert "unittest" not in sys.modules To get an idea of the differences to the import-based approach try analysing the following script: import random if random.choice([True, False]): def f(): "say hello" else: def f(): "kill a kitten" def g(): "whatever" del g Peter -- http://mail.python.org/mailman/listinfo/python-list