基本上我想使用绝地从它的定义(路径,行,列)的细节中检索一个函数或一个类的代码。更明确地说,我真正希望的是从文件中获取代码,即未执行的静态代码。
问问题
52 次
3 回答
0
看来您可以使用ast
andcodegen
来完成这项任务。
我将发布一个代码示例来说明这一点:
import ast,codegen
def find_by_line(root, line):
found = None
if hasattr(root, "lineno"):
if root.lineno == line:
return root
if hasattr(root, "body"):
for node in root.body:
found = find_by_line(node, line)
if found:
break
return found
def get_func_code(path, line):
with open(path) as file:
code_tree = ast.parse(file.read())
unit = find_by_line(code_tree, line)
return codegen.to_source(unit)
于 2016-03-29T13:24:03.573 回答
0
Jedi 目前不支持此功能。您当然可以这样做,但不能使用公共 API。Jedi 的 API 目前缺少两件事:
- 按位置获取类/函数(您可以通过玩绝地解析器来获取)。
- 上课后获取代码。这很容易:
node.get_code()
尝试玩jedi.parser.Parser
。这是一个非常强大的工具,但尚未公开记录。
于 2016-04-29T13:39:57.000 回答
0
我使用此文件https://github.com/Erotemic/utool/blob/next/utool/util_inspect.py中定义的函数 find_pyfunc_above_row来完成类似的任务。
于 2016-03-02T13:56:09.607 回答