2013-03-03 47 views
2

我很想嘗試python。我知道我可以檢查並使用frame.f_localsframe.f_globals將局部和全局變量注入到框架中,但我現在很想創建一個完整的調用堆棧。Python是否可以重新創建整個調用堆棧?

什麼阻止我改變堆棧信息是因爲python不允許我改變它。

我實際上已經考慮通過編程來轉換我正在使用的python模塊,以便模擬堆棧。但我知道這是一個可怕的解決方案,因爲if,while,withtry的客戶端代碼使用情況很容易破壞我的代碼。

我也看着操縱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屬性。

+2

還有更多的比你的堆棧跟蹤直接看到Python解釋器的狀態。除非你設計一個程序來捕捉它的狀態,否則這是Python不可或缺的任務,具有python的動態特性。 – 2013-03-03 10:15:15

+0

這可能只有在您修改解釋器本身時纔有可能。 – 2013-03-03 10:24:14

+0

我想寫一個C擴展。 – 2013-03-03 10:24:31

回答

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

TypeError: cannot create 'frame' instances 

對不起。

1

看看在線Python導師(http://www.pythontutor.com/)。它的作用是在執行過程中捕獲幀以創建python代碼的可視化。所以,你可以使用捕獲的幀。

+0

我假設它使用跟蹤函數(['sys.settrace'](docs.python.org/library/sys.html#sys.settrace))捕獲幀和執行行。但是接下來的問題是關於從python改變/創建框架,而不僅僅是閱讀。 – 2013-03-03 12:33:49

相關問題