0

基本上我想使用绝地从它的定义(路径,行,列)的细节中检索一个函数或一个类的代码。更明确地说,我真正希望的是从文件中获取代码,即未执行的静态代码。

4

3 回答 3

0

看来您可以使用astandcodegen来完成这项任务。

我将发布一个代码示例来说明这一点:

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 目前缺少两件事:

  1. 按位置获取类/函数(您可以通过玩绝地解析器来获取)。
  2. 上课后获取代码。这很容易: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 回答