【问题标题】:Can you debug a python file that is called by a bash script in PyCharm?你能调试一个由 PyCharm 中的 bash 脚本调用的 python 文件吗?
【发布时间】:2019-11-22 17:51:56
【问题描述】:

我有一些 python 代码调用一个调用另一个 python 文件的 bash 脚本。我正在尝试在 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 "$@"
...

【问题讨论】:

  • outter.py如何调用bash_script?
  • subprocess.run('./bash_script param1', shell=True)
  • PyCharm 不一定运行您的 inner.py 文件。正在生成一个运行inner.py 的独立进程。新进程不知道您的断点。在这种情况下,我建议您(在调试时)在调试器打开的情况下通过 pycharm 运行inner.py。如果您需要自己设置sys.argv 以“模拟”批处理脚本运行时会出现的情况,请执行此操作 (sys.argv[1] = param1; sys.argv[2] = param2; …)
  • 我担心我不得不这样做,哈哈

标签: python pycharm


【解决方案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) 的连接。

在用于运行inner.py的解释器上安装pydevd-pycharm并添加

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 随意投票/评论。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2020-06-29
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 2015-06-29
  • 2021-06-22
相关资源
最近更新 更多