我有兴趣尝试使用 python。我知道我可以使用 frame.f_locals 和 frame.f_globals 检查局部和全局变量并将其注入(inject)到框架中,但我现在渴望创建一个完整的调用堆栈。
阻止我仅仅更改堆栈信息的是 python 不允许我更改它的事实。
我实际上考虑过以编程方式转换我正在使用的 python 模块,以模拟缠绕堆栈。但我知道这是一个糟糕的解决方案,因为客户端代码使用 if、while、with 和 try 会轻松破解我的代码。
我也研究过如何操纵 frame.f_back,但无济于事。它是只读的。
>>> import sys
...
... frm = sys._getframe()
...
... frm.f_back = None
Traceback (most recent call last):
File "<pyshell#4>", line 5, in <module>
frm.f_back = None
TypeError: readonly attribute
我想做什么
作为一项实验,我正在尝试通过网络实现 fork()。
我知道 stackless python 可能有我想要的东西,但仍然无法更改 frame.f_back 属性。
请您参考如下方法:
看看 Online Python Tutor (http://www.pythontutor.com/)。它的作用是在执行期间捕获帧以创建 python 代码的可视化。因此,您可以使用捕获的帧。
