您可以在PyCharm中调试bash脚本调用的python文件吗?

时间:2019-11-21 23:39:16

标签: python pycharm

我有一些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 "$@"
...

1 个答案:

答案 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.pyinner.py将调用pydevd_pycharmpydevd_pycharm将建立与调试器Java前端的连接并暂停脚本执行。现在,在PyCharm中切换到调试器工具窗口,然后像往常一样逐步执行代码。

我还创建了一张票证,以改进文档https://youtrack.jetbrains.com/issue/PY-39229,请随时投票/发表评论。