调试模式PyCharm中的键盘中断

时间:2014-04-07 13:12:29

标签: python python-2.7 pycharm

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

5 个答案:

答案 0 :(得分:15)

不幸的是,没有简单的方法可以做到这一点。您需要使用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中运行它。确保您使用的口译员已安装psutils。你可以查看:

enter image description here

确保您已正确设置翻译:

enter image description here

如果您尚未安装psutil,则可以通过安装按钮随时安装。{/ p>

好的,那么现在我们已经完成了所有设置,让我们调试程序:

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

完成所有这些操作后,您只需致电interrupt(<pid here>)即可在您的流程中调用键盘中断。

我希望能回答你的问题。

答案 1 :(得分:10)

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

See how the stop button changed its icon

答案 2 :(得分:8)

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

键盘中断是一种SIGINT。在unix系统上,您可以转到命令行并执行:

$ kill -INT <pid>

或在python中:

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

答案 3 :(得分:1)

我在搜索Pycharm的错误跟踪时遇到此消息: https://youtrack.jetbrains.com/issue/PY-4840

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

跟踪器中的一条评论: &#39;我实际上发现Ctrl + C最终会停止正在运行的脚本,但是当它运行时你必须首先在控制台中写一个字母。因此,单击控制台窗口,按任意键,然后按Ctrl-C。换句话说,它似乎是GUI框架获得焦点的问题。&#39;

答案 4 :(得分:0)

此评论中提到-Why doesn't this python keyboard interrupt work? (in pycharm)

  

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

经过PyCharm 2018.3(社区版)的测试:

enter image description here

这也会破坏tqdm库:

enter image description here