在PyCharm调试模式下键盘中断

34 投票
6 回答
20463 浏览
提问于 2025-04-18 01:42

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

6 个回答

5

我在查找Pycharm的bug跟踪时,遇到了这个信息:https://youtrack.jetbrains.com/issue/PY-4840

如果你使用的是Pycharm 3版本,这个方法可能对你有帮助,我试过是有效的。

在跟踪器中的一条评论提到:‘我发现其实Ctrl+C确实可以停止正在运行的脚本,但你必须先在控制台里输入一个字母。也就是说,先点击控制台窗口,按下任意键,然后再按Ctrl-C。换句话说,这看起来像是GUI窗口没有获得焦点的问题。’

12

这是PyCharm中的一个错误。你可以查看这个链接了解更多信息:http://youtrack.jetbrains.com/issue/PY-4840

键盘中断是一个叫做SIGINT的信号。在Unix系统中,你可以去命令行输入:

$ kill -INT <pid>

或者在Python中:

import os, signal
os.kill(<pid>,signal.SIGINT)
13

在PyCharm中,停止按钮现在在调试模式和运行模式下都会发送一个叫做SIGINT的信号。如果这个SIGINT信号没有让程序停止,停止按钮就会把信号改成SIGKILL。同时,它的图标也会变成一个骷髅的形状:

看看停止按钮是如何改变图标的

23

很遗憾,这个事情没有简单的方法。你需要使用 psutilsignal 模块。为了让它工作,你需要安装 psutil,最简单的方式是通过 pip 来安装:

pip install psutil

假设我们这里有一个例子A:

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

如果你在 PyCharm 中运行这个程序,确保你使用的解释器已经安装了 psutil。你可以检查一下:

enter image description here

确保你的解释器设置正确:

enter image description here

如果你还没有安装 psutil,你可以通过 Install 按钮来安装。

好了,现在我们已经设置好了一切,接下来就来调试程序:

enter image description here

现在我们要做的就是获取进程ID,这个可以在程序开始的时候就获取到:

enter image description here

接下来,打开我们的控制台,发送一个信号:

enter image description here

如果一切正常,你应该会看到循环结束:

enter image description here

你还可以通过在控制台的启动脚本中添加一个函数来发送中断信号,从而简化这个过程:

enter image description here

完成这些后,你只需要调用 interrupt(<pid here>) 来对你的进程发送一个键盘中断。

希望这些信息能帮到你。

9

在这个评论中提到的内容 - 为什么这个Python的键盘中断在PyCharm中不工作?

在最近版本的PyCharm中,你可以在运行配置中启用 在输出控制台中模拟终端 选项 - 这样在运行控制台中按 Ctrl + C 就可以发送一个键盘中断。

在PyCharm 2018.3(社区版)中测试过:

在这里输入图片描述

另外,这样做会影响 tqdm 这个库:

在这里输入图片描述

撰写回答