我有一些 python 代码调用一个 bash 脚本,该脚本调用另一个 python 文件。我正在尝试调试 PyCharm 中的代码,但似乎没有到达最里面文件中的断点。
代码设置如下:
outter.py 来电-> bash_script 来电-> inner.py
我设置了断点inner.py,但是当我尝试调试时,未到达outter.py断点。inner.py我在打印到标准输出中放置了一些打印语句inner.py,这样我就知道该文件实际上已到达。
不可否认,自从我使用 PyCharm 以来,这是一个很热门的时刻,所以我不太知道我是否做错了什么,或者是否因为 bash 文件而发生了奇怪的事情。
编辑:具体调用如下:
#outter.py
...
subprocess.run('./bash_script param1', shell=True)
...
#bash_script
...
python3 -m inner.py "$@"
...
PyCharm 实际上对这种情况有特殊支持,它被称为“Python 远程调试”(这不是明显的命名,但我创建了一个票证来修复该问题https://youtrack.jetbrains.com/issue/PY-39230) 。
这是相关的文档页面:https://www.jetbrains.com/help/pycharm/remote-debugging-with-product.html#remote-debug-config您可以完全忽略“远程”部分。
您基本上需要“Python 远程调试”运行配置,它在循环中启动调试器 Java 前端,等待来自 Python 后端的连接 ( pydevd-pycharm)。
安装pydevd-pycharm在用于运行的解释器上inner.py并添加
import pydevd_pycharm
pydevd_pycharm.settrace('localhost', port=12345, stdoutToServer=True, stderrToServer=True)
在您想要停止的内部某个位置inner.py(如果需要,调整端口)。比跑outter.py。它将调用 bash,bash 将调用inner.py、inner.py将调用pydevd_pycharm、pydevd_pycharm将建立与调试器 Java 前端的连接并暂停脚本执行。现在切换到 PyCharm 中的调试器工具窗口并像往常一样单步执行代码。
我还创建了一张票证来改进文档https://youtrack.jetbrains.com/issue/PY-39229请随意投票/评论。
| 归档时间: | 
 | 
| 查看次数: | 2088 次 | 
| 最近记录: |