Мне интересно экспериментировать с python. Я знаю, что могу проверять и вводить локальные и глобальные переменные в фрейм, используя frame.f_locals
и frame.f_globals
, но теперь я пытаюсь создать полный стек вызовов.Python Можно ли воссоздать весь стек вызовов?
Что мешает мне просто изменять информацию о стеке, является тот факт, что 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()
по сети.
Я знаю, что у бесконтактного питона может быть то, что я хочу, но изменить атрибут frame.f_back
по-прежнему невозможно.
Существует еще в состоянии питон переводчика, чем вы видите непосредственно в трассировке стека. Если вы не создадите программу для захвата ее состояния, это невыполнимая задача с динамической природой python. –
Это может быть возможно только при изменении самого интерпретатора. –
Я думал о написании расширения C. –