是否可以在执行代码之前拦截解释器的代码?
让我们说我想处理一个案例:
>>> 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.
但是还有很多其他的例子(比如改变代码,或者把它发送到某个地方)。
我可以自己编写翻译,但这不是重点。
答案 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()