On Sun, Mar 17, 2013 at 1:23 AM, Mark Shroyer <mshro...@awaredigital.com> wrote: > I realize this isn't yet precisely what you're asking for, but look at the > inspect and ast modules: > > import ast, inspect > > def indent_level(): > lineno = inspect.currentframe().f_back.f_lineno > > with open(__file__) as source_file: > tree = ast.parse(source_file.read(), filename=__file__) > > for node in ast.walk(tree): > if hasattr(node, 'lineno') and node.lineno == lineno: > return node.col_offset > > def example_usage(): > print("first indent_level() = {0}".format(indent_level())) > if True: > print("second indent_level() = {0}".format(indent_level())) > > if __name__ == '__main__': > example_usage() > > The indent_level function above returns the textual column offset rather than > the logical block level you're asking for, e.g.: > > first indent_level() = 4 > second indent_level() = 8 > > But hopefully it's a start.
Thanks. I try to run it from stdin. Obviously, it does not work. The problem is the stdin can not be read again. Is there a way to extend the code that indentation can be computed even the code is from stdin? ~/linux/test/python/tricks/indent_level$ python - < main.py Traceback (most recent call last): File "<stdin>", line 23, in <module> File "<stdin>", line 16, in example_usage File "<stdin>", line 8, in indent_level IOError: [Errno 2] No such file or directory: '<stdin>' ~/linux/test/python/tricks/indent_level$ cat main.py #!/usr/bin/env python import ast, inspect def indent_level(): lineno = inspect.currentframe().f_back.f_lineno with open(__file__) as source_file: tree = ast.parse(source_file.read(), filename=__file__) for node in ast.walk(tree): if hasattr(node, 'lineno') and node.lineno == lineno: return node.col_offset def example_usage(): print indent_level() #print("first indent_level() = {0}".format(indent_level())) if True: print indent_level() #print("second indent_level() = {0}".format(indent_level())) if __name__ == '__main__': example_usage() -- Regards, Peng -- http://mail.python.org/mailman/listinfo/python-list