2013-09-25 2 views
1

Я пишу расширение IPython с магией ячеек, которые вызывают другой исполняемый файл через pexpect. Он сохраняет этот исполняемый файл в фоновом режиме для жизни ядра. Есть ли где-нибудь крючок, чтобы я мог отправить этот подпроцесс Ctrl-C при повышении прерывания ядра (например, в меню «Ядро прерывания» в IPython Notebook)?В 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() 
Смежные вопросы