在PyCharm调试模式下键盘中断
有没有办法在调试模式下,在PyCharm IDE(3.1)中发送一个键盘中断事件?
6 个回答
我在查找Pycharm的bug跟踪时,遇到了这个信息:https://youtrack.jetbrains.com/issue/PY-4840
如果你使用的是Pycharm 3版本,这个方法可能对你有帮助,我试过是有效的。
在跟踪器中的一条评论提到:‘我发现其实Ctrl+C确实可以停止正在运行的脚本,但你必须先在控制台里输入一个字母。也就是说,先点击控制台窗口,按下任意键,然后再按Ctrl-C。换句话说,这看起来像是GUI窗口没有获得焦点的问题。’
这是PyCharm中的一个错误。你可以查看这个链接了解更多信息:http://youtrack.jetbrains.com/issue/PY-4840
键盘中断是一个叫做SIGINT的信号。在Unix系统中,你可以去命令行输入:
$ kill -INT <pid>
或者在Python中:
import os, signal
os.kill(<pid>,signal.SIGINT)
很遗憾,这个事情没有简单的方法。你需要使用 psutil
和 signal
模块。为了让它工作,你需要安装 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
。你可以检查一下:
确保你的解释器设置正确:
如果你还没有安装 psutil
,你可以通过 Install 按钮来安装。
好了,现在我们已经设置好了一切,接下来就来调试程序:
现在我们要做的就是获取进程ID,这个可以在程序开始的时候就获取到:
接下来,打开我们的控制台,发送一个信号:
如果一切正常,你应该会看到循环结束:
你还可以通过在控制台的启动脚本中添加一个函数来发送中断信号,从而简化这个过程:
完成这些后,你只需要调用 interrupt(<pid here>)
来对你的进程发送一个键盘中断。
希望这些信息能帮到你。
在这个评论中提到的内容 - 为什么这个Python的键盘中断在PyCharm中不工作?:
在最近版本的PyCharm中,你可以在运行配置中启用
在输出控制台中模拟终端
选项 - 这样在运行控制台中按 Ctrl + C 就可以发送一个键盘中断。
在PyCharm 2018.3(社区版)中测试过:
另外,这样做会影响 tqdm 这个库: