2014-12-18 1 views
0

파이썬 프로그램의 AST에서 구문 분석 한 다음 수정 한 다음 실행해도 되겠습니까? 구체적으로 말하면, 문자열 리터럴의 동작을 변경하고 싶습니다. 함수 호출에서 각 문자열을 래핑하는 대신 AST를 수정할 수 있다고 생각했습니다.파이썬 프로그램 AST를 수정할 수 있습니까?

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

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

이 될 것이다는 것을 어떻게 든 수 있습니까?

답변

1

표준 라이브러리 ast 모듈을 사용하여 첫 번째 부분을 수행 할 수 있습니다. 아마도 NodeTransformer을 사용해야 할 것입니다.

그런 다음 codegen 모듈을 사용하여 소스 코드를 생성 한 다음 실행할 수 있습니다. 개념의

증명 :

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