我有一些python代码,该代码调用一个bash脚本,该脚本调用另一个python文件。我正在尝试调试PyCharm中的代码,但似乎无法到达最里面文件中的断点。
代码设置如下:
outter.py
通话-> bash_script
通话-> inner.py
我在inner.py
中放置了断点,但是当我尝试调试outter.py
时,却没有达到inner.py
中的断点。我在inner.py
中放了一些打印语句,这些语句可以打印到stdout,因此我知道文件实际上已经到达。
诚然,自从我使用PyCharm以来,这已经是第二个热点了,所以我不知道我是因为bash文件而做错了什么还是奇怪的事情。
编辑: 具体调用如下:
#outter.py
...
subprocess.run('./bash_script param1', shell=True)
...
#bash_script
...
python3 -m inner.py "$@"
...
答案 0 :(得分:1)
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,请随时投票/发表评论。