1
我正在寫一個IPython擴展,其中包含通過pexpect
呼叫另一個可執行文件的單元魔術。它使這個可執行文件在內核的整個生命週期中保持在後臺運行。在某處是否存在鉤子,以便在引發內核中斷時(例如,IPython Notebook中的「中斷內核」菜單選項),我可以發送此子進程Ctrl-C
?在IPython中,擴展可以處理內核中斷嗎?
我正在寫一個IPython擴展,其中包含通過pexpect
呼叫另一個可執行文件的單元魔術。它使這個可執行文件在內核的整個生命週期中保持在後臺運行。在某處是否存在鉤子,以便在引發內核中斷時(例如,IPython Notebook中的「中斷內核」菜單選項),我可以發送此子進程Ctrl-C
?在IPython中,擴展可以處理內核中斷嗎?
轉貼作爲一個答案:
IPython中通過發送SIGINT,當你按下Ctrl-C在終端多數民衆贊成發射相同的信號中斷內核。所以,只要你想抓住它,而你自己的代碼運行時,你可以趕上KeyboardInterrupt
,像這樣:
p.sendline('some command')
try:
p.expect(processing_finished_mark)
except KeyboardInterrupt:
p.sendintr()
你控制時,是否要中斷它是仍然執行單元的子?或從後臺線程?或者你剛剛創建了pexpect對象並繼續做其他事情。通過「停止」按鈕,您是指中斷菜單選項還是儀表板上的內核關機按鈕? –
@ThomasK我不確定你評論的第一部分是什麼意思,但我想我正在做第一個選擇。當它由IPython加載時,擴展啓動子進程,然後單元魔術實現發送行並從中讀取輸出。這發生在調用單元魔術的同一個線程上。 – acfoltzer
當內核被關閉*或僅僅被中斷*時,你是否希望它停止?這些是不同的事情 - 你可以在中斷它之後繼續使用內核,但關閉它之後,內核進程就會消失。 –