2013-03-03 3 views
2

Мне интересно экспериментировать с 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 по-прежнему невозможно.

+2

Существует еще в состоянии питон переводчика, чем вы видите непосредственно в трассировке стека. Если вы не создадите программу для захвата ее состояния, это невыполнимая задача с динамической природой python. –

+0

Это может быть возможно только при изменении самого интерпретатора. –

+0

Я думал о написании расширения C. –

ответ

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, а не просто чтении. –

Смежные вопросы