如何使 Jupyter Lab 保存笔记本(以编程方式)

时间:2021-03-31 02:06:49

标签: python jupyter-notebook jupyter jupyter-lab

我有一个可以通宵运行的笔记本,可以打印出一堆东西,包括图像等。我想以编程方式保存此输出(可能以特定时间间隔)。我还想保存运行的代码。在 Jupyter 笔记本中,您可以:

from IPython.display import display, Javascript
display(Javascript('IPython.notebook.save_checkpoint();'))
# causes the current .ipynb file to save itself (same as hitting CTRL+s)

(来自Save an IPython notebook programmatically from within itself?

虽然,我发现这个 javascript 注入在 Jupyter 实验室中不起作用(Jupyter not found)。我的问题是如何在 Jupyter 实验室中执行上述代码的等效操作。在检查 jupyter 实验室的 HTML 时,我找不到 Jupyter 对象。

1 个答案:

答案 0 :(得分:1)

JupyterLab 具有内置的自动保存功能。您可以使用高级设置编辑器的文档管理器部分配置时间间隔(请参见下面的屏幕截图)。

autosave config

但是,如果您真的想要一个 JavaScript 解决方案,您可以使用以下命令调用键盘快捷键 Ctrl + s

from IPython.display import display, Javascript

display(Javascript(
    "document.body.dispatchEvent("
    "new KeyboardEvent('keydown', {key:'s', keyCode: 83, ctrlKey: true}"
    "))"
))

这仅在您不将焦点转移到其他笔记本时才有效。但是,您始终可以使用不可见的 HTML 节点(例如 input)先收回焦点:

from IPython.display import display, HTML

script = """
this.nextElementSibling.focus();
this.dispatchEvent(new KeyboardEvent('keydown', {key:'s', keyCode: 83, ctrlKey: true}));
"""
display(HTML((
    '<img src onerror="{}" style="display:none">'
    '<input style="width:0;height:0;border:0">'
).format(script)))

您始终可以将脚本包装在 window.setTimoutwindow.setInterval 中 - 但由于 JupyterLab 的内置自动保存功能,应该不需要它。