如何使用AST在Python中注释掉特定的语句?

时间:2014-03-14 03:41:36

标签: python abstract-syntax-tree

我有一个Python脚本,但我不想改变它。 我想使用另一个脚本来修改原始脚本并调用以运行原始脚本和所有" print"或" time.sleep"被发表评论的语句(未运行)。 我搜索它并找到一个使用AST的方法,但我真的不知道如何使用它。 非常感谢你!

1 个答案:

答案 0 :(得分:0)

您可能能够操纵AST来实现这一目标,但是在运行之前对它所使用的任何对象进行monkeypatch可能会更容易。在您的具体示例中,要使printtime.sleep失效,您可以执行此操作:

def insomniac(duration):
    pass  # don't sleep

_original_sleep = time.sleep
time.sleep = insomniac

def dont_write(stuff):
    pass  # don't write

_original_write = sys.stdout.write
sys.stdout.write = dont_write

要恢复功能,可以将相关功能设置回存储的原稿。如果你想更真实地表达你的原始意图,以便从相关脚本调用这些函数无效,但是来自其他模块的调用仍然有效,你可以检查堆栈以查看调用者所在的模块并选择性地调用原始模块或忽略这个电话。