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

时间:2013-03-03 10:12:31

标签: python python-stackless

我对使用python进行实验感兴趣。我知道我可以使用frame.f_localsframe.f_globals检查并将局部变量和全局变量注入到框架中,但我现在想要创建一个完整的调用堆栈。

让我不仅仅是更改堆栈信息的原因是python不允许我更改它。

我实际上已经考虑过以编程方式转换我正在使用的python模块,以便模拟卷绕堆栈。但我知道这是一个糟糕的解决方案,因为ifwhilewithtry的客户端代码使用很容易破坏我的代码。

我也看过操纵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()

我知道无堆栈python可能有我想要的东西,但仍然无法改变frame.f_back属性。

3 个答案:

答案 0 :(得分:1)

查看在线Python导师(http://www.pythontutor.com/)。它的作用是在执行期间捕获帧以创建python代码的可视化。所以,你可以使用捕获的帧。

答案 1 :(得分:0)

>>> type(sys._getframe())()

TypeError: cannot create 'frame' instances

对不起。

答案 2 :(得分:0)

您应该查看AST modulesymtable module