调试模式PyCharm中的键盘中断

arb*_*zar 29 python pycharm python-2.7

在调试模式下,有没有办法在PyCharm IDE(3.1)中发送键盘中断事件?

Gam*_*iac 19

不幸的是,没有简单的方法可以做到这一点.您将需要使用psutilsignal模块.为此,您需要安装psutil,最好的方法是pip:

pip install psutil
Run Code Online (Sandbox Code Playgroud)

所以,让我们说在这里,展示A:

while True:
    try:
        time.sleep(3)
        print "Zzzz"
        time.sleep(3)
        print("gong!")
    except KeyboardInterrupt as e:
        print "Closed by an Interrupt"
        break
Run Code Online (Sandbox Code Playgroud)

你在PyCharm中运行它.确保您正在使用的解释器已psutils安装.你可以查看:

在此输入图像描述

确保您正确设置了解释器:

在此输入图像描述

如果尚未安装psutil,则可以通过Install按钮始终执行此操作.

好吧那么,现在我们已经设置了所有内容,让我们调试程序:

在此输入图像描述

现在我们所要做的就是获取进程ID,我们可以在程序的最开始处得到它:

在此输入图像描述

所以,让我们启动我们的控制台,并发送一个信号:

在此输入图像描述

如果这个工作正常,你应该看到while循环结束:

在此输入图像描述

您可以通过在控制台的启动脚本中添加一个发送中断的函数来进一步简化该过程:

在此输入图像描述

完成所有这些操作后,您需要做的就是调用interrupt(<pid here>)在您的进程上调用键盘中断.

我希望能回答你的问题.


mil*_*iez 13

PyCharm Stop按钮现在SIGINT以调试模式和运行模式发送.如果SIGINT不终止程序,则" 停止"按钮将其信号更改为SIGKILL.它还将其图标更改为头骨形状:

查看停止按钮如何更改其图标

  • @milaniez 你知道这个功能是在哪个版本中引入的吗?SIGINT 似乎是在我的 Mac 上发送的,但是对于 Windows PyCharm 2017.1.5,程序在调试和运行模式下都会立即终止。 (2认同)

dvj*_*dvj 9

这是PyCharm中的一个错误.请参阅:http://youtrack.jetbrains.com/issue/PY-4840

键盘中断是SIGINT.在unix系统上,您可以转到命令行并执行以下操作:

$ kill -INT <pid>
Run Code Online (Sandbox Code Playgroud)

或者在python中:

import os, signal
os.kill(<pid>,signal.SIGINT)
Run Code Online (Sandbox Code Playgroud)


Mr.*_*Che 9

正如此评论中提到的 -为什么这个 python 键盘中断不起作用?(在pycharm中)

在 PyCharm 的最新版本中,您可以Emulate terminal in output console在运行配置中启用- 这允许运行控制台中的Ctrl+C 发送键盘中断。

使用 PyCharm 2018.3(社区版)测试:

在此处输入图片说明

这也会破坏tqdm库:

在此处输入图片说明


dam*_*ang 5

我在搜索 Pycharm 的错误跟踪以查找此问题时看到了此消息: https: //youtrack.jetbrains.com/issue/PY-4840

如果您使用的是 Pycharm 3 版本,这可能会有所帮助,它对我有用。

跟踪器中的评论之一:“我实际上发现 Ctrl+C 确实最终会停止正在运行的脚本,但您必须在脚本运行时首先在控制台中写入一个字母。因此,单击控制台窗口,按任意键,然后按 Ctrl-C。换句话说,这看起来像是 GUI 框架获得焦点的问题。