Вы не можете использовать consoleHandler()
здесь, потому что нет консоли . Ядро IPython - это «безголовый» дочерний процесс, который выполняет код по запросу, управляемый внешним интерфейсом Jupyter.
Чтобы прервать работающее ядро IPython, интерфейс Jupyter использует сигнал SIGINT
. Это делается как на POSIX, так и на Windows; в Windows Jupyter использует дополнительную инфраструктуру, построенную вокруг CreateEventA
, SetEvent
и WaitForMultipleObjects
для достижения того же результата, что и вызов POSIX os.killpg(PID, SIGINT)
; отдельный поток опрашивает событие и запускает сигнал SIGINT
в основном потоке.
Обратите внимание, что ядро IPython явно восстанавливает обработчик сигналов Python по умолчанию для каждого сообщения, которое оно обрабатывает. См. Реализации ipykernel.kernelbase.Kernel
для методов pre_
и post_handler_hook
:
self.saved_sigint_handler = signal(SIGINT, default_int_handler)
и
signal(SIGINT, self.saved_sigint_handler)
Эти два перехвата выполняются до и после каждый обработчик сообщений (то есть для каждое сообщение, отправляемое внешним интерфейсом процессу ядра , включая сообщения выполнения ).
Именно signal.default_int_handler
вызывает KeyboardInterrupt
в основном потоке Python. Если ваш код должен обнаруживать прерывания, он должен будет регистрировать свой собственный обработчик signal
каждый раз, когда IPython запускает ячейку.
В качестве дополнительного примечания: автономный интерактивный интерпретатор Python также не использует SetConsoleCtrlHandler
для обнаружения прерываний клавиатуры ; единственное место, которое используется в исходном коде Python, находится в модуле запуска py
, и только тогда, чтобы глушить управляющие коды с помощью обработчика, который всегда возвращает TRUE
. Вместо этого Python использует Windows, посылающую сигнал SIGINT
всем подключенным процессам консоли для активного окна консоли .
В мире Unix утилиту называют iconv.
Не уверенный, если существует эквивалентные окна.
Можно попросить, чтобы VS 2008 открылся, файл с кодированием (нажмите Arrow около кнопки Open в открытом диалоговом окне),
Или можно изменить региональные настройки для добавления российского региона как значения по умолчанию ;)