1

执行 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

另一种说法是,如果我正在运行脚本并通过调试器逐步执行,我想知道接下来要执行的代码片段。我已经看过这个关于跟踪的问题, 但我感兴趣的不仅仅是跟踪回调函数中执行的次数。

调试器会有所帮助,但前提是我可以在非交互模式下运行它并能够回调 python 代码

4

3 回答 3

4

查看sys.settrace函数。这允许您指定为每一行代码执行的跟踪函数。我认为,它是专门为创建而实现的,pdb因此它处于您似乎想要的正确抽象级别。实现你想要的不是微不足道的,但我认为这是最好的起点。

对于使用它的生产程序,请查看coverage.py

于 2012-08-03T16:12:51.317 回答
2

April's fools 模块goto是用 Python 实现的跟踪的一个工作示例,因此尽管它无疑比 coverage.py 中的 C 实现慢,但它相当容易理解。http://entrian.com/goto/

于 2013-01-31T11:03:58.200 回答
2

接受 Noufal 的回答,因为它让我走上了正确的道路,但这也有帮助

http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html

于 2012-08-03T21:55:00.160 回答