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()