2013-08-21 2 views
0
내가 나에게 현재 작업 기능 트리를 표시합니다 클래스를 작성하려는

, 즉 의미파이썬 : 함수 호출의 내부 정보 자동 로깅

것은 이제 내가 먼저 다음 함수를 호출 기능 B를 작동 있다고 가정 해 봅시다 C, 함수 C의 호출은 시간 t = 1에서, B가 실행 D.를 작동하므로 I는 표준 출력이 원하는 : 표준 출력은가되도록, 시간 t = 2, B가 돌아왔다에서

Root: function A -> running properly, called B 
2-nd: function B -> running properly 

:

Root: function A -> running properly, B returned 
시간 t = 3에서 10

는, A는 시간 t = 4에서 C. 불렀다, C가 표준 출력이어야 D. 요구했다 : 시간 t = 5에서

Root: function A -> running properly, B returned, called C 
2-nd: function C -> running properly, called D 
3-rd: function D -> running properly 

는 D 반환. 시간 t = 6에서 C가 반환되었습니다. 표준 출력은 다음과 같아야 시간 t = 7에서

Root: function A -> running properly, B returned, C returned 

이 기능 리턴 된 :

Root: function A -> Done 

로거 객체를 생성하고 주위를 전달하는 것 외에도,이 문제를 자동화하는 더 우아한 방법은 무엇입니까? A 또는 B가 다중 스레드 프로세스 인 경우에는 어떻게됩니까?

모든 의견을 보내 주시면 감사하겠습니다. 고맙습니다!

+2

'inspect' 모듈을 보았습니까? 이미 스택과 트레이스를 얻을 수 있습니다. –

+0

전에 보지 못했습니다. 내가 읽었을 때 아마도 사용 가능할 것입니다. 그러나 나는 로깅의 깨끗한 방법을 원한다. inspect를 사용하면 모든 함수가 호출되기 전에 정보를 얻기 위해 함수 집합을 호출해야하는 것처럼 보입니다. 이것은 내장되어 있고 위대한 것을 제외하고는 로거 객체와 동일합니다. – Mai

답변

1

파이썬에서 trace module을 살펴보십시오.

추적 모듈은 프로그램 실행을 추적 할 수 있습니다, 주석 문 범위 목록을 생성, 인쇄 발신자 :이 모듈

파이썬 문서에서 추적 모듈의 정의를 사용하여 주석이 추적 보고서를 생성 할 수 있습니다/피 호출자 관계 및 프로그램 실행 중에 실행되는 목록 함수. 다른 프로그램이나 명령 줄에서 사용할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 모든 기능을 무시하여 인쇄하기 전에 로깅 출력을 수정할 수 있습니까? 내 직책에 대해서는 언급하지 않았지만 나중에는 두 번째 질문이 될 필요에 따라 결과물을 유연하게 작성해야합니다. – Mai

+0

@Mai이 작업을 완료 할 수 있는지 확실하지 않습니다. 코드 커버리지 분석 및 호출 추적을 위해 추적 코드를 사용하는 방법에 대해 자세히 설명하는이 문서를 자세히 살펴보고 알아 냈습니다. http://doughellmann.com/2008/10/ pymotw-trace.html. 내 생각에, 추적 명령 자체의 출력을 파싱하여 원하는 형식으로 렌더링 할 수 있습니까? –