В ноутбуке Jupyter есть встроенные магии, которые меняют содержимое ячейки ноутбука. Например, магия %load
заменяет содержимое текущей ячейки содержимым файла в файловой системе.
Как я могу написать пользовательскую магическую команду, которая делает что-то подобное?
Что я до сих пор печатает что-то в stdout
def tutorial_asset(line):
print('hello world')
def load_ipython_extension(ipython):
ipython.register_magic_function(tutorial_asset, 'line')
И я могу загрузить его с помощью %load_ext tutorial_asset
. Но оттуда я потерялся.
[Редактировать]:
Я нашел способ добраться до экземпляра интерактивной оболочки:
@magics_class
class MyMagics(Magics):
@line_magic
def tutorial_asset(self, parameters):
self.shell
Объект self.shell
кажется, дает полный доступ к набору ячеек в записной книжке, но единственным способом, который я могу найти для изменения ячеек, является сделать self.shell.set_next_input('print("hello world")')
. Этого недостаточно, потому что в ноутбуке Jupyter эта входная ячейка пропускается, и она не перезаписывает входную ячейку, а вместо нее создает новую ячейку ввода после нее.
Это было бы хорошо, но если я запустил ноутбук второй раз, он создаст другую ячейку ввода с тем же загруженным файлом, что раздражает. Могу ли я загрузить его только один раз, скажем, путем проверки того, находится ли содержимое в следующей ячейке?