我正在使用jupyter笔记本创建软件文档(带有nbsphinx的sphinx)。我想在jupyter笔记本中包含一些.py文件。这些文件应加载并显示在单元格中(因为它们应稍后出现在文档中),并且还应运行以产生所需的输出(图形和文本)。
我发现不久前有人在问类似的事情: Jupyter: Write a custom magic that modifies the contents of the cell it's in 但是,使用答案对我不起作用。
我不得不做些小修改,因为我不想在执行单元格后注释掉魔术线本身。 ('#%lmagic \ n {}'->'%lmagic \ n {}')
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):
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)
#import time
#time.sleep(2)
ip = get_ipython()
ip.register_magics(MyMagics)
在下一个单元格中执行:
%lmagic
将不显示任何输出。但是,如果我增加了一段短暂的睡眠时间(通过取消注释代码段中的两行),则可以观察到它是暂时显示的,然后消失了。我假设异步函数调用和渲染起着作用。
经过以下测试: Jupyter Notebook 5.7.8,IPython 7.4.0
有什么解决办法吗?
朱利安