如何以编程方式 execute/step 到 Python 逐行编码

How to programmatically execute/step through Python code line by line

我正在尝试找到一种方法,让程序逐行执行 Python 代码,并对每一行的结果进行处理。实际上,调试器可以通过编程方式而不是手动方式进行控制。如果 pdb 在每个步骤后将其输出作为字符串返回,那么 pdb 将正是我正在寻找的,然后我可以再次调用 pdb 以从我离开的地方拾取。但是,它输出到标准输出,我必须通过键盘手动输入 "step"。

我尝试过的事情:

  1. 我可以重定向 pdb 的标准输出。我可以将它重定向到第二个 Python 然后处理它的程序。但是,我不能 弄清楚如何让第二个 Python 程序告诉 pdb 步骤.

  2. 和上一篇相关,要是能把pdb一路step一下就好了 一直到最后(也许我可以想出一些东西来欺骗 键盘重复输入 "step"?) 并将输出重定向到 文件,然后我可以编写另一个程序 在实际上只是阅读程序时单步执行程序 逐行归档。

  3. 我可以使用 exec 手动执行 运行 行 Python 代码。然而, 因为我一次要看一行,所以我需要 手动检测和处理诸如条件、循环和 函数调用很快就会变得非常复杂。

  4. 我看了一些帖子说pdb是用 sys.settrace。如果没有别的工作我应该能够重新创建 我需要使用这个的行为。

是否有任何 established/straight 前向方法来实现我正在寻找的行为?

sys.settrace() 是单步执行 Python 代码的基本构建块。 pdb 完全在 Python 中实现,因此您只需查看模块即可了解它是如何工作的。它还具有各种 public functions/methods 用于在程序控制下单步执行,有关详细信息,请阅读您的 Python 版本的库参考。

I read some posts that say that pdb is implemented using sys.settrace. If nothing else works I should be able to recreate the behavior I need using this.

不要将此视为最后的手段。我认为这是您想要实现的目标的最佳方法。