Получение трассировки python без исключения

Предположим, у вас есть следующие модули:

module1.py

import module2

def a():
    module1.b()

def c():
    print "Hi guys!"

module2.py

import module1

def b():
    module1.c()

Мне нужна функция func(a()), которая выдает результат, аналогичный этому: (=a traceback ?)

 /usr/local/lib/python2.7/dist-packages/test/module1.py
   3 def a():
   4     module1.b()

   1 import module1

 /usr/local/lib/python2.7/dist-packages/test/module2.py
   3 def b():
   4     module1.c()

   1 import module2

 /usr/local/lib/python2.7/dist-packages/test/module1.py
   6 def c():
   7     print "Hi guys!"

Это возможно со стандартными модулями tracebackи/или cgitbи/или inspect, но мне трудно понять эти модули из документации.

Я думал, что можно выполнить traceback.print_stack(a()), но по какой-то причине он продолжал загружаться вечно. Я пробовал другие функции в этих модулях, но безуспешно.

ОБНОВЛЕНИЕ 3

@jterrace

python trapy_module.py :

import trace

def trapy(arg):
    tracer = trace.Trace()
    tracer.run(arg)
    r = tracer.results()
    r.write_results()

if __name__ == '__main__':
    import random
    trapy('random.random()')

Теперь, когда я делаю: python trapy_module.pyЯ получаю:

--- modulename: trapy, funcname: <module>
<string>(1): 

Замена import random на import pyglet и random.random() на pyglet.app.run()просто продолжает работать, ничего не выводя.

12
задан Bentley4 16 June 2012 в 14:00
поделиться