簡體   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