Предположим, у вас есть следующие модули:
import module2
def a():
module1.b()
def c():
print "Hi guys!"
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())
, но по какой-то причине он продолжал загружаться вечно. Я пробовал другие функции в этих модулях, но безуспешно.
@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()
просто продолжает работать, ничего не выводя.