2014-01-21 131 views
2

击键Ctrl + \导致python和ipython到核心转储并立即退出。我怎样才能防止这一点?我不想禁用键或重新映射键盘。防止终止交互式python的SIGQUIT

我最近搬到了英国键盘,而我已经习惯了在Enter键上方的反斜杠/管道键,现在位于左移键和Z键之间。我发现我很频繁地碰撞SIGQUIT的键盘快捷方式,并失去了交互式解释器的所有变量。

回答

2

看来你是在一个* nix平台上。 Ctrl\生成SIGQUIT,所以这不是真正的Python。

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

stty quit undef 

或者,使用以下方法来运行Python:

stty quit undef; python; stty quit ^\\ 

这将前禁用键映射执行python并稍后重新设置。

+0

谢谢,完美的作品。语法^ \\是什么意思? – wim

+0

@wim基本上将'SIGQUIT'映射到Ctrl + \。你需要逃避反斜杠本身。 – devnull

0

可以使用signal模块,并设置一个处理程序SIGQUIT信号:

import signal 

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

signal.signal(signal.SIGQUIT, handler) 

这个代码添加到IPython的startup files

+0

我应该提到,这是我目前的解决方案。我认为它感觉不舒服,因为它妨碍我运行实际上依赖于SIGQUIT出于合法原因的代码。 – wim

+0

从IPython 5开始,这不再起作用。 Ctrl- \绑定是硬编码的。 –

1

涉及信号处理程序的回答并不能解决IPython 5和更高版本的问题,因为Ctrl-\绑定现在在应用程序级显式处理(这与从readline迁移到提示工具包有关)。

要禁用Ctrl-\为IPython中的较新版本(在IPython的5.3测试),用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)