在调试模式下,有没有办法在PyCharm IDE(3.1)中发送键盘中断事件?
答案 0 :(得分:15)
不幸的是,没有简单的方法可以做到这一点。您需要使用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中运行它。确保您使用的口译员已安装psutils
。你可以查看:
确保您已正确设置翻译:
如果您尚未安装psutil
,则可以通过安装按钮随时安装。{/ p>
好的,那么现在我们已经完成了所有设置,让我们调试程序:
现在我们所要做的就是获取进程ID,我们可以在程序的最开始处得到它:
所以,让我们启动我们的控制台,并发送一个信号:
如果这个工作正常,你应该看到while循环结束:
您可以通过在控制台的起始脚本中添加一个发送中断的函数来进一步简化流程:
完成所有这些操作后,您只需致电interrupt(<pid here>)
即可在您的流程中调用键盘中断。
我希望能回答你的问题。
答案 1 :(得分:10)
答案 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(社区版)的测试:
这也会破坏tqdm库: