2012-08-03 34 views
1

执行Python脚本最简单的方法是什么?对于每个执行语句,将行号或行本身传递给回调函数是什么?例如以编程方式逐行跟踪Python程序行/语句的执行

要执行的一段代码

for i in range(5): 
    z = i**2 

和回调

def callback(line): 
    print line 

输出将是:

for i in range(5): 
    z = i**2 
for i in range(5): 
    z = i**2 
for i in range(5): 
    z = i**2 
... 
etc 

说明此的另一种方式是,我想要知道如果我正在执行通过调试的脚本,那么将执行下一个代码段ger ..我见过this question about tracing,但我对跟踪回调函数中执行的次数感兴趣。

调试器将是有益的,但只有当我可以运行回调到Python代码

回答

3

看那sys.settrace功能的能力也非交互模式。这使您可以指定为每行代码执行的跟踪功能。我认为,这是专门为实现pdb而实施的,因此它处于您似乎想要的正确抽象层次。实现你想要的并不是微不足道的,但我认为这是最好的开始。

对于使用此功能的生产程序,请看coverage.py

2

四月的傻瓜模块goto是在Python追查实施工作的例子,所以虽然它无疑比较慢(而不是coverage.py中的C实现),它很容易理解。 http://entrian.com/goto/

+0

多数民众赞成在可怕的,但有趣:) – dfb 2013-01-31 18:50:43

+0

@dfb确实。它还显示了如何将执行头更改为另一行。基于该代码,我实现了绝对和相对的JMP指令。很有趣。 – 2013-02-01 12:26:47