Python Возможно ли воссоздать весь стек вызовов?
Я заинтересован в экспериментах с питоном. Я знаю, что могу проверять и вводить локальные и глобальные переменные в кадр, используя frame.f_locals
а также frame.f_globals
, но сейчас мне не терпится создать полный стек вызовов.
Что мешает мне просто изменить информацию стека, так это то, что 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()
по сети.
Я знаю, что Python без стеков может иметь то, что я хочу, но все еще невозможно изменить frame.f_back
приписывать.
3 ответа
Взгляните на онлайн Python Tutor ( http://www.pythontutor.com/). Что он делает, так это то, что он захватывает фреймы во время выполнения для создания визуализации кода Python. Таким образом, вы можете использовать захваченные кадры.
>>> type(sys._getframe())()
TypeError: cannot create 'frame' instances
Сожалею.