是否可以修改Python程序AST?

时间:2014-12-18 11:25:50

标签: python-3.x abstract-syntax-tree

是否可以解析Python程序的AST,然后修改它,然后执行它?具体来说,我想改变字符串文字的行为。我没有在函数调用中包装每个字符串,而是认为我可以修改AST。

BUILDDIR = macro('build')
SOURCES = macro('$wildcard(src/*.cpp)')

会变成

BUILDDIR = 'build'
SOURCES = '$wildcard(src/*.cpp)'

这有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用标准库ast模块来完成第一部分。您可能需要使用NodeTransformer

然后,您可以使用codegen模块创建源代码,然后执行该代码。

概念证明:

import ast
import codegen
expr = """
BUILDDIR = 'build'
"""
p = ast.parse(expr)
# your code here...
exec(codegen.to_source(p))