繁体   English   中英

Javascript Jupyter Notebook 如何获取代码单元格内容?

[英]Javascript Jupyter Notebook How to get code cell content?

(有一个类似的问题在这里,但它是关于使用Python代码阅读降价细胞。我想使用JavaScript(例如在Jupyter笔记本前端延伸)读取码单元的源代码。)

我想对代码进行分析。 但是,如果我简单地检查 Jupyter Notebook 的 DOM,结果是嵌套div的真正 DOM 噩梦(可能其中一半是多余的):

在此处输入图片说明

正如我们在这里看到的,源代码的每个字符都在它自己的元素中。 自然地,我不是很热衷于将所有这些东西从它的标签中提取出来并再次连接它来获取代码单元的代码。 有没有一些简单的方法来获取单元格的源代码?

也许一些 Jupyter JS API 函数? (笔记本本身如何实际获取它发送到内核的代码?应该有一些东西已经在做这项工作。)或者一些jQuery 代码,它非常聪明地获取所有内容?

我能想到的一种替代方法是在内核在后端对其进行评估之前以某种方式拦截代码单元格内容,但我也不知道如何做到这一点,它需要输出 HTML,其中包含具有立即执行功能的 JS在代码单元的输出中,当它运行时。 如果我想要实际代码的输出代码单元输出中的代码分析的输出,这也可能会变得复杂。 也许它没有我想象的那么复杂,但到目前为止,如果有一些简单的方法来获取它,那么在 JS 端获取代码似乎更好......

此处查看 Juypter cell.js文件 - 它列出了 Jupyter 本身用于与单元格交互的函数。 特别是,函数get_text()将返回单元格的内容。 (这适用于所有类型的单元格 - 查看codecell.js文件以了解仅特定于代码单元格的功能)

在浏览器中进行测试的一种快速方法 - 访问全局Jupyter对象的notebook实例以获取notebook的第一个单元格:

var cell = Jupyter.notebook.get_cell(0);

现在我们有了单元格 - 我们可以读取其中的代码! 用:

var code = cell.get_text();

编辑:您可以使用Javascript函数将此结果保存到 Python 变量中以在 Python 单元格中执行 Javascript,并使用IPython.notebook.kernel.execute以在 Javascript 中执行 Python - 这用于设置具有代码名称的变量。 请注意,您必须将引号之类的字符转义为我使用 encodeURI 来执行 URI 编码/解码。

from IPython.display import Javascript
import urllib.parse

Javascript("const code = Jupyter.notebook.get_cell(0).get_text(); IPython.notebook.kernel.execute(`myvar = '${encodeURI(code)}'`);")
urllib.parse.unquote(myvar)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM