防止SIGQUIT终止交互式python

时间:2014-01-21 10:29:52

标签: python signals ipython core coredump

按键 Ctrl + \ 会导致python和ipython核心转储并立即退出。我怎么能阻止这个?我不想禁用密钥或重新映射键盘。

我最近搬到了英国的键盘上,反之亦然,我以前在Enter键上方使用反斜杠/管道键,现在位于左移键盘和Z键之间。我发现我经常撞到SIGQUIT的键盘快捷键,并从交互式解释器中丢失所有变量。

3 个答案:

答案 0 :(得分:2)

您似乎在* nix平台上。 Ctrl \ 会生成SIGQUIT,所以这对Python来说并不是那么多。

如果要禁用组合键,可以在启动Python之前使用stty

stty quit undef

或者,使用以下命令运行Python:

stty quit undef; python; stty quit ^\\

会在执行python之前禁用键映射并稍后再将其设置回来。

答案 1 :(得分:1)

涉及信号处理程序的答案无法解决IPython 5及更高版本的问题,因为Ctrl-\绑定现在在应用程序级别显式处理(这与从readline到prompt toolkit的迁移有关)。 / p>

要为较新版本的IPython(在IPython 5.3上测试)禁用Ctrl-\,请使用startup files禁用该绑定:

from IPython.terminal.shortcuts import force_exit
from IPython import get_ipython
ip = get_ipython()
ip.pt_cli.application.key_bindings_registry.remove_binding(force_exit)

答案 2 :(得分:0)

您可以使用signal模块并为SIGQUIT信号设置处理程序:

import signal

def handler(signum, frame):
    print("SIGQUIT")

signal.signal(signal.SIGQUIT, handler)

并将此代码添加到IPython startup files