在Jupyter笔记本中,有一些内置的魔法可以改变笔记本电脑的内容。例如, %load
magic使用文件系统上文件的内容替换当前单元格的内容。
如何编写一个类似的自定义魔术命令?
到目前为止我所拥有的东西是stdout
def tutorial_asset(line):
print('hello world')
def load_ipython_extension(ipython):
ipython.register_magic_function(tutorial_asset, 'line')
我可以加载它 %load_ext tutorial_asset
。但是从那里我迷失了。
[编辑]:
我找到了一种方法来访问交互式shell实例:
@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笔记本中,跳过输入单元格,并且它不会覆盖输入单元格,而是在它之后创建一个新的输入单元格。
这没关系,但如果我第二次运行笔记本,它会创建另一个加载了相同文件的输入单元,这很烦人。我可以通过检查内容是否已经在下一个单元格中来加载一次吗?