Моя цель: я хочу настроить сообщение comm, отправить сообщение из JS в Python и заставить код Python напечатать сообщение в ячейке Jupyter.
Я следовал инструкциям по созданиюcomm для отправки сообщений между кодом расширения Python и кодом расширения JS:
https://jupyter -notebook.readthedocs.io / en / stable / comms.html
Вот что они предлагают использовать - сначала код JS:
Jupyter.notebook.kernel.comm_manager.register_target('my_comm_target',
function(comm, msg) {
// comm is the frontend comm instance
// msg is the comm_open message, which can carry data
// Register handlers for later messages:
comm.on_msg(function(msg) {...});
comm.on_close(function(msg) {...});
comm.send({'foo': 0});
});
Далее код Python:
from ipykernel.comm import Comm
# Use comm to send a message from the kernel
my_comm = Comm(target_name='my_comm_target', data={'foo': 1})
my_comm.send({'foo': 2})
# Add a callback for received messages.
@my_comm.on_msg
def _recv(msg):
# Use msg['content']['data'] for the data in the message
После выполнения этих двух по порядку я понимаю, что код Pythonотправляет сообщение comm_open, которое отправляется функции JS (comm, msg), которая затем устанавливает обработчики и отправляет {'foo': 0'}
обратно в код Python, который затем запускает _recv.
Я хочу иметь возможностьвыводить что-либо через код Python, например, print, log, IPython.display.display () и т. д. Однако на этой странице кажется, что код _recv выполняется в канале оболочки IPython, что, по-видимому, не допускает никаких побочных эффектов.- печать, ipdb,или что-нибудь еще.https://jupyter -client.readthedocs.io / en / latest / messaging.html # custom-messages
Лучшее, что я мог получить, это raise Exception(msg)
, который показал трассировку в ядре Jupyterвывод в терминале, но это не помогает мне регистрировать происходящее и не позволяет писать сообщения в выходные ячейки Jupyter.
Есть ли способ переключить контекст обратно на канал IOPub из _recv или отправитьпи-пи-пи сообщение для запуска в этом контексте?Это позволило бы мне установить breakpoint()
и т. Д. Или любое другое решение этой проблемы.Спасибо:)