Tracing the execution of a Python program line/statement by line programmatically

扶醉桌前 提交于 2019-12-02 08:44:44

问题


What would be the easiest way to execute a Python script and, for each executed statement, pass the line number or the line itself to a callback function? For example

A piece of code to be executed

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

and a callback

def callback(line):
   print line

The output would be:

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

Another way of stating this is that I want to know the piece of code that would be next to execute if I were running the script stepping through a debugger.. I've seen this question about tracing but I'm interested in doing more than tracing the number of times executed in the callback function.

A debugger is going to be helpful, but only if I can run it non-interactive mode with the ability to call back to the python code


回答1:


Look at the sys.settrace function. This allows you to specify a tracing function which is executed for every line of code. It was, I think, specifically implemented to create pdb so it's at the right level of abstraction you seem to want. Implementing what you want will not be trivial but I think it's the best place to start.

For an production program that uses this, look at coverage.py.




回答2:


Accepting Noufal's answer since it put me on the right path, but this helped as well

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




回答3:


The April's fools module goto is a working example of tracing implemented in Python, so although it's doubtlessly slower (than the C implementation in coverage.py), it's rather easy to understand. http://entrian.com/goto/



来源:https://stackoverflow.com/questions/11789744/tracing-the-execution-of-a-python-program-line-statement-by-line-programmaticall

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!