2014-01-21 101 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)