基本的に、関数またはクラスのコードをその定義の詳細 (パス、行、列) から取得するために jedi を使用したいと考えています。より明確にするために、私が本当に望んでいるのは、実行されていない静的なファイルからコードを取得することです。
3 に答える
0
ast
と を使用しcodegen
てこのタスクを達成できるようです。
これを説明するために、コードのサンプルを投稿します。
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 に欠けているものが 2 つあります。
- 位置ごとにクラス/関数を取得します (これは、jedi のパーサーで遊ぶことで取得できます)。
- クラスを作成したら、コードを取得します。これはとても簡単です:
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 に答える