在执行之前拦截python解释器代码

时间:2016-09-20 14:27:50

标签: python interpreter

是否可以在执行代码之前拦截解释器的代码?

让我们说我想处理一个案例:

>>> for f in glob.glob('*.*'): # I'd like to intercept this code before it executes 
...     something_to_do(f)     # and play with it in some dangerous fashion :)
...
ERROR: Using glob not allowed. # e.g.

但是还有很多其他的例子(比如改变代码,或者把它发送到某个地方)。

我可以自己编写翻译,但这不是重点。

1 个答案:

答案 0 :(得分:0)

好的,通过创建启动新解释器实例并执行任何操作的新模块来解决它。

我只是将下面的代码放在模块中并导入它。

import code

class GlobeFilterConsole(code.InteractiveConsole):
    def push(self, line):
        self.buffer.append(line)
        source = "\n".join(self.buffer)

        if 'glob' in source: # do whatever you want with the source
            print('glob usage not allowed')
            more = False
        else:
            more = self.runsource(source, self.filename)

        if not more:
            self.resetbuffer()
        return more


console = GlobeFilterConsole()
console.interact()