是否可以解析Python程序的AST,然后修改它,然后执行它?具体来说,我想改变字符串文字的行为。我没有在函数调用中包装每个字符串,而是认为我可以修改AST。
BUILDDIR = macro('build')
SOURCES = macro('$wildcard(src/*.cpp)')
会变成
BUILDDIR = 'build'
SOURCES = '$wildcard(src/*.cpp)'
这有可能吗?
答案 0 :(得分:1)
您可以使用标准库ast
模块来完成第一部分。您可能需要使用NodeTransformer。
然后,您可以使用codegen模块创建源代码,然后执行该代码。
概念证明:
import ast
import codegen
expr = """
BUILDDIR = 'build'
"""
p = ast.parse(expr)
# your code here...
exec(codegen.to_source(p))