Re: How to automatically get the indent level from code?
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
RE: How to automatically get the indent level from code?
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. Mark -Original Message- From: Python-list [mailto:python-list-bounces+mshroyer=awaredigital@python.org] On Behalf Of Peng Yu Sent: Sunday, March 17, 2013 12:53 AM To: python-list@python.org Subject: How to automatically get the indent level from code? Hi, I want to get the indent level within the code. For example, I want to print 1 within the while loop as the line is indented 1 level. Is it possible to get it within python? while 1: #print the level of indent, which is 1 here. -- Regards, Peng -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
How to automatically get the indent level from code?
Hi, I want to get the indent level within the code. For example, I want to print 1 within the while loop as the line is indented 1 level. Is it possible to get it within python? while 1: #print the level of indent, which is 1 here. -- Regards, Peng -- http://mail.python.org/mailman/listinfo/python-list
Re: How to automatically get the indent level from code?
No On Sun, Mar 17, 2013 at 12:52 AM, Peng Yu pengyu...@gmail.com wrote: Hi, I want to get the indent level within the code. For example, I want to print 1 within the while loop as the line is indented 1 level. Is it possible to get it within python? while 1: #print the level of indent, which is 1 here. -- Regards, Peng -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list