2013-03-03 8 views
2

저는 파이썬을 실험하는데 흥미가 있습니다. frame.f_localsframe.f_globals을 사용하여 로컬 변수와 글로벌 변수를 검사하고 주입 할 수 있다는 것을 알고 있지만 이제 전체 호출 스택을 생성하는 것이 가렵습니다.파이썬 전체 호출 스택을 다시 생성 할 수 있습니까?

스택 정보를 변경하지 못하게하는 이유는 파이썬이 나를 변경할 수 없도록한다는 사실입니다.

실제로 스택을 감아 시뮬레이션하기 위해 사용하고있는 파이썬 모듈을 프로그래밍 방식으로 변환하는 것으로 간주했습니다. 그러나 나는 클라이언트 코드 사용이 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

봐야한다. 프로그램이 상태를 캡처 할 수 있도록 설계하지 않는다면, 이것은 파이썬의 동적 특성으로는 불가능한 작업입니다. –

+0

이것은 인터프리터 자체를 수정 한 경우에만 가능할 수 있습니다. –

+0

C 확장을 작성할 생각입니다. –

답변

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

TypeError: cannot create 'frame' instances 

죄송합니다.

1

Online Python Tutor (http://www.pythontutor.com/)를 살펴보십시오. 그것이하는 일은 실행 중에 프레임을 캡처하여 파이썬 코드의 시각화를 생성하는 것입니다. 따라서 캡처 한 프레임을 사용할 수 있습니다.

+0

추적 기능 (['sys.settrace'] (docs.python.org/library/sys.html#sys.settrace))을 사용하여 프레임을 캡처하고 실행 된 라인이라고 가정합니다. 하지만 다시 질문은 단순히 독서뿐만 아니라 파이썬으로 프레임을 변경/생성하는 것입니다. –

0

당신은 AST module 당신이 스택 추적에서 직접 볼보다 파이썬 인터프리터 상태에 이상이있는 symtable module

관련 문제