PyCharm (i)Python 控制台:"Stop current command" of "Execute Selection in Python Console" (=Alt+Shift+E) 进程没有丢失内存中的变量?

PyCharm (i)Python Console: "Stop current command" of "Execute Selection in Python Console" (=Alt+Shift+E) process without losing variables in memory?

我习惯于强制停止运行选择代码。这在 vscode 和 Spyder 中是可能的,而不会丢失内存中的变量。

来自 Spyder 的示例,它使用的是 iPython 控制台:您 运行 具有相同“运行 选择或当前行”(在 Spyder 中:F9)过程的命令,您意识到它需要太长了,你想停止它。您只需使用“停止当前命令”(红色方块)即可。

停止后,记忆并没有丢失,所有在停止时刻已知的变量还在记忆中。证明:

当你在Spyder中继续时,你可以选择任何已经通过到停止时刻的代码行继续(你也可以选择后面的代码行,但这通常没有意义)。例如,如果您停止一个长 运行ning 循环,更改该循环的代码然后再次 运行,或者您返回 10 行代码以从那里开始。

您可以自由地从任何代码行继续执行新的选择。

相比之下,在PyCharm中,我只找到红色方块“Stop Console”,它完全停止了控制台,此后无法进行任何操作,内存中的所有变量都丢失了。

在“Python 控制台”中按下红色方块或按 Ctrl+C 后,控制台将关闭。

控制台打印

Process finished with exit code 0

并且无法再进行输入。在此停止之后,也不再有“在 Python 控制台中执行选择”(Shift+Alt+E)的选项,它会导致:

"Re运行" / "New Console" 都重启了内核,内存中的变量都丢失了:

使用 iPython 控制台而不是标准的 Python 控制台(您可以在 [File>Settings>MyProject>Project Interpreter] 下安装它,参见 How To Add The IPython Console To PyCharm),同样的问题:

即使在使用 iPython 的 Spyder 中也会发生这种情况,“停止”使我回到 iPython shell 而不会丢失内存中的变量。我猜这个线程 Can I stop execution of current module in ipython without leaving ipython 是关于一个类似的问题,虽然与 PyCharm.

没有特别相关

如何在 PyCharm 中获得类似于 Spyder 的“停止当前命令”选项的停止选项,以便“停止”将变量保留在内存中,然后我可以从那里继续已经停止了吗?

请注意线程 Keyboard interrupt in debug mode PyCharm 不是这个的副本,因为它接受的答案也会导致一个封闭的内核。

调试器有暂停操作,可以从工具栏或菜单访问。

https://www.jetbrains.com/help/pycharm/pausing-and-resuming-the-debugger-session.html

这里唯一的选择是使用断点。您可以通过单击行号右侧的区域来添加它们。

来源:

How to pause program execution in Pycharm (pause button not working)?

虽然在 PyCharm 中可以通过 run/debug 配置在 运行 时暂停脚本,但不幸的是 运行 时“暂停”操作不可用控制台中的选择,您请求的“停止”按钮也不是。当前实现的“停止”按钮发送SIGTERM/SIGKILL.

已针对此问题创建功能请求:https://youtrack.jetbrains.com/issue/PY-44346