Ответ 1
EDIT: После небольшого дальнейшего копания, я обнаружил, что нынешняя сборка ноутбуков не может обойти оба.
Ну, это немного сложно... Глядя на код IPython, похоже, вам нужно использовать set_next_input
если вы хотите заменить ячейку, и run_cell
если вы действительно хотите запустить какой-то код. Однако я не могу заставить обоих работать сразу - похоже, что set_next_input
всегда выигрывает.
Копаясь в коде, веб-интерфейс поддерживает дополнительную очистку вывода на set_next_input
. Однако ядро еще не поддерживает установку этого флага (и поэтому вывод всегда будет очищен как действие по умолчанию). Чтобы сделать лучше, потребуется патч для ipykernel.
Лучшее, что у меня есть, это следующий код, используя версию jupyter notebook 4.2.1:
from __future__ import print_function
from IPython.core.magic import Magics, magics_class, line_magic
@magics_class
class MyMagics(Magics):
@line_magic
def lmagic(self, line):
"Replace current line with new output"
raw_code = 'print("Hello world!")'
# Comment out this line if you actually want to run the code.
self.shell.set_next_input('# %lmagic\n{}'.format(raw_code), replace=True)
# Uncomment this line if you want to run the code instead.
# self.shell.run_cell(raw_code, store_history=False)
ip = get_ipython()
ip.register_magics(MyMagics)
Это дает вам волшебную команду lmagic
, которая либо заменит текущую ячейку, либо запустит raw_code
зависимости от того, какой бит кода вы закомментировали.