Jupyter notebook custom.js не применяется при использовании «Restarting & Run All» - PullRequest
0 голосов
/ 21 октября 2018

Чтобы получить имя работающей записной книжки Jupyter, я сначала добавил следующую строку в ~ / .jupyter / custom / custom.js

// Create a nb_name variable with the name of the notebook
IPython.notebook.kernel.execute('nb_name = "' + IPython.notebook.notebook_name + '"');

Затем на своей записной книжке при запуске ячейкис:

print(nb_name)

Я получаю:

NameError                                 Traceback (most recent call last)
<ipython-input-1-7e37f787d8df> in <module>()
----> 1 print(nb_name)

NameError: name 'nb_name' is not defined

Чтобы решить эту проблему, мне нужно добавить первую строку с командой оповещения:

alert("hello world from custom.js")

// Create a nb_name variable with the name of the notebook
IPython.notebook.kernel.execute('nb_name = "' + IPython.notebook.notebook_name + '"');

ЗатемКогда я загружаю свой блокнот, появляется окно с предупреждением, и как только я его закрываю, я получаю имя блокнота, как и ожидалось.

Как я могу заставить его работать без каких-либо действий со стороны пользователя (я использую блокнот версии 5.0.0 и, поскольку я не являюсь администратором сервера, не могу его обновить)?

РЕДАКТИРОВАТЬ:

Вопрос в Ожидание готовности ядра при выполнении кода через ядро ​​Jupyter (Jupyter Notebookрасширение) частично решил проблему.Файл Custom.js, содержащий:

Jupyter.notebook.events.one('kernel_ready.Kernel', () => {
     // Create a nb_name variable with the name of the notebook
     IPython.notebook.kernel.execute('nb_name = "' + IPython.notebook.notebook_name + '"');
});

Возвращает имя записной книжки, как и ожидалось.Теперь проблема заключается в том, что я все еще получаю сообщение об ошибке, упомянутое выше, когда я «Перезапустить и запустить все».Любые комментарии или идеи приветствуются.

1 Ответ

0 голосов
/ 15 августа 2019

custom.js kernel_ready.Kernel Событие запускается только один раз при загрузке страницы, но не запускается после Restart & Run all (или любых его вариантов).Мое решение этой проблемы немного хакерское:

/**
 * `kernel_ready` logic
 */
function custom_kernel_ready_handler() {
    IPython.notebook.kernel.execute('nb_name = "' + IPython.notebook.notebook_name + '"');
}

function handle_kernel_ready() {
    // Create a nb_name variable with the name of the notebook
     console.log('kernel_ready.Kernel: handle_kernel_ready() was triggered!');
     custom_kernel_ready_handler();

     Jupyter.notebook.events.one('kernel_ready.Kernel', () => {
         //this recursive behavior is esential for `restart` kernel
         handle_kernel_ready();
    });
}

Jupyter.notebook.events.one('kernel_ready.Kernel', () => {
     handle_kernel_ready();
});

Надеясь на лучшее решение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...