【问题标题】:Calling Python debugger within a Python script - ends immediately and doesn't debug在 Python 脚本中调用 Python 调试器 - 立即结束并且不调试
【发布时间】:2021-01-13 18:05:27
【问题描述】:

我有一个 Python 脚本,我希望能够从命令行进行调试。假设它被称为simple.py,它包含以下代码:

var1 = "Hello"
var2 = "World"
print(var1, var2)

我想调试这个。当然我可以从命令行使用调试器:

python -m pdb simple.py

但我想专门从另一个 python 文件中调试它。我尝试使用 subprocess 来执行此操作,方法是将这段代码放入另一个脚本 debug.py:

import subprocess
subprocess.Popen(["bash", "-ic", "python -m pdb simple.py"])

当我在 Bash shell 中运行它时,会发生这种情况:

$ python debug.py
$ > /[path]/simple.py(1)<module>()
-> var1 = "Hello"
(Pdb) n
bash: n: command not found
$ 

所以我输入了“n”,期望调试器移动到下一行。相反,它似乎只是直接回到 Bash,而调试器什么也不做。

知道为什么会这样吗?有没有办法从 Python 脚本中生成一个包含 Python 调试器的 Bash shell,我实际上可以用它来调试?

【问题讨论】:

    标签: python bash debugging subprocess pdb


    【解决方案1】:

    您的debug.py 完成运行并返回到shell(尝试输入ls,看看会发生什么)

    您正在寻找的是一种与其他进程交互的方式,您需要从您的标准输入获取输入并将其传递给其他进程标准输入。它可能看起来像:

    import subprocess
    p = subprocess.Popen(["python3", "-m", "pdb", "test.py"])
    
    while True:
        cmd = input()
        p.stdin.write(cmd.encode())
    

    【讨论】:

    • 所以我在你写它的时候尝试了这个,但说的是“找不到文件 test.py”。然后我添加到 Popen 参数列表 "bash", "-ic" 以启动 bash 子进程。然后它似乎加载了调试器,但是当我按“n”或任何实际上时,程序立即结束。
    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2011-12-09
    • 2017-11-25
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多