python打印所有函数调用以了解脚本流
如何打印每个函数/方法调用? 我曾尝试使用:python打印所有函数调用以了解脚本流,python,stack-trace,Python,Stack Trace,如何打印每个函数/方法调用? 我曾尝试使用:python-m trace--trace但它也会打印函数内部代码。。。我只需要调用的函数名。 在代码中使用回溯打印在调用命令本身之前调用的最后一个函数,并且代码包含许多类…您可能会发现-l很有用 main.py: def foo(): pass def bar(): pass foo() bar() 做 输出 functions called: filename: C:\Python34\lib\trace.py, module
python-m trace--trace
但它也会打印函数内部代码。。。我只需要调用的函数名。
在代码中使用回溯打印在调用命令本身之前调用的最后一个函数,并且代码包含许多类…您可能会发现
-l
很有用
main.py:
def foo():
pass
def bar():
pass
foo()
bar()
做
输出
functions called:
filename: C:\Python34\lib\trace.py, modulename: trace, funcname: _unsettrace
filename: main.py, modulename: main, funcname: <module>
filename: main.py, modulename: main, funcname: bar
filename: main.py, modulename: main, funcname: foo
这是名为
player.py
的代码
# player.py
def foo():
pass
def bar():
foo()
def car():
bar()
pass
car()
从终端执行命令,如$python-m trace-T player.py
,它给出以下输出。对于相同的输出,您也可以使用--trackcalls
代替-T
。该命令显示通过运行该程序公开的调用关系
calling relationships:
*** /usr/lib/python2.7/trace.py ***
trace.Trace.runctx -> trace._unsettrace
--> player.py
trace.Trace.runctx -> player.<module>
*** player.py ***
player.<module> -> player.car
player.bar -> player.foo
player.car -> player.bar
如果我们运行这个,我们可以看到下面的输出
File "D:/python_practice36/player.py", line 10, in <module>
bar()
File "D:/python_practice36/player.py", line 6, in bar
foo()
File "D:/python_practice36/player.py", line 3, in foo
car()
File "D:/python_practice36/player.py", line 8, in car
traceback.print_stack()
输出是
File "D:/python_practice36/player.py", line 10, in <module>
bar()
File "D:/python_practice36/player.py", line 7, in bar
foo()
File "D:/python_practice36/player.py", line 4, in foo
traceback.print_stack()
文件“D:/python\u practice36/player.py”,第10行,在
bar()
文件“D:/python\u practice36/player.py”,第7行,在bar中
foo()
文件“D:/python\u practice36/player.py”,第4行,在foo中
traceback.print_stack()
python-m trace-l main.py
按字母顺序打印,而不是按调用顺序打印。添加装饰器不是一个选项。。。太多的函数和类,我没有编写代码。谢谢
import traceback
def foo():
car()
pass
def bar():
foo()
def car():
traceback.print_stack()
pass
bar()
File "D:/python_practice36/player.py", line 10, in <module>
bar()
File "D:/python_practice36/player.py", line 6, in bar
foo()
File "D:/python_practice36/player.py", line 3, in foo
car()
File "D:/python_practice36/player.py", line 8, in car
traceback.print_stack()
import traceback
def foo():
car()
traceback.print_stack()
pass
def bar():
foo()
def car():
pass
bar()
File "D:/python_practice36/player.py", line 10, in <module>
bar()
File "D:/python_practice36/player.py", line 7, in bar
foo()
File "D:/python_practice36/player.py", line 4, in foo
traceback.print_stack()