2013-09-25 29 views
1

我正在寫一個IPython擴展,其中包含通過pexpect呼叫另一個可執行文件的單元魔術。它使這個可執行文件在內核的整個生命週期中保持在後臺運行。在某處是否存在鉤子,以便在引發內核中斷時(例如,IPython Notebook中的「中斷內核」菜單選項),我可以發送此子進程Ctrl-C在IPython中,擴展可以處理內核中斷嗎?

+0

你控制時,是否要中斷它是仍然執行單元的子?或從後臺線程?或者你剛剛創建了pexpect對象並繼續做其他事情。通過「停止」按鈕,您是指中斷菜單選項還是儀表板上的內核關機按鈕? –

+0

@ThomasK我不確定你評論的第一部分是什麼意思,但我想我正在做第一個選擇。當它由IPython加載時,擴展啓動子進程,然後單元魔術實現發送行並從中讀取輸出。這發生在調用單元魔術的同一個線程上。 – acfoltzer

+0

當內核被關閉*或僅僅被中斷*時,你是否希望它停止?這些是不同的事情 - 你可以在中斷它之後繼續使用內核,但關閉它之後,內核進程就會消失。 –

回答

2

轉貼作爲一個答案:

IPython中通過發送SIGINT,當你按下Ctrl-C在終端多數民衆贊成發射相同的信號中斷內核。所以,只要你想抓住它,而你自己的代碼運行時,你可以趕上KeyboardInterrupt,像這樣:

p.sendline('some command') 
try: 
    p.expect(processing_finished_mark) 
except KeyboardInterrupt: 
    p.sendintr() 
相關問題