Gam*_*iac 19
不幸的是,没有简单的方法可以做到这一点.您将需要使用psutil
和signal
模块.为此,您需要安装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
.它还将其图标更改为头骨形状:
这是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)
正如此评论中提到的 -为什么这个 python 键盘中断不起作用?(在pycharm中):
在 PyCharm 的最新版本中,您可以
Emulate terminal in output console
在运行配置中启用- 这允许运行控制台中的Ctrl+C 发送键盘中断。
使用 PyCharm 2018.3(社区版)测试:
这也会破坏tqdm库:
我在搜索 Pycharm 的错误跟踪以查找此问题时看到了此消息: https: //youtrack.jetbrains.com/issue/PY-4840
如果您使用的是 Pycharm 3 版本,这可能会有所帮助,它对我有用。
跟踪器中的评论之一:“我实际上发现 Ctrl+C 确实最终会停止正在运行的脚本,但您必须在脚本运行时首先在控制台中写入一个字母。因此,单击控制台窗口,按任意键,然后按 Ctrl-C。换句话说,这看起来像是 GUI 框架获得焦点的问题。