Skip to main content
 首页 » 编程设计

Python 是否可以重新创建整个调用堆栈

2025年05月04日8jpfss

我有兴趣尝试使用 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 代码的可视化。因此,您可以使用捕获的帧。