( Aquí hay una pregunta similar, pero se trata de usar código python para leer celdas de descuento. Quiero usar JavaScript (por ejemplo, en una extensión frontal de Jupyter Notebook) para leer el código fuente en celdas de código).
Quiero realizar un análisis en el código. Sin embargo, si simplemente inspecciono el DOM de un Jupyter Notebook, resulta ser una verdadera pesadilla DOM de div
s anidados (probablemente la mitad de ellos son redundantes):
Como podemos ver aquí, cada carácter del código fuente está en su propio elemento. Naturalmente, no estoy muy interesado en sacar todas esas cosas de sus etiquetas y concatenarlas nuevamente solo para obtener el código de una celda de código. ¿Hay alguna manera fácil de obtener el código fuente de una celda?
¿Quizás alguna función de la API de Jupyter JS? (¿Cómo obtiene el portátil el código que envía al kernel? Debería haber algo que ya esté haciendo este trabajo). ¿O alguna pequeña pieza de código jQuery, que es muy inteligente para obtener todo el contenido?
Una alternativa que se me ocurre es interceptar de alguna manera el contenido de las celdas de código antes de que el kernel lo evalúe en el backend, pero tampoco sé cómo hacerlo todavía y requeriría generar HTML, que contiene JS con una función ejecutada inmediatamente. en la salida de la celda de código, cuando se ejecuta. Esto también podría complicarse, si quiero la salida del código real y la salida del análisis del código en la salida de la celda del código. Tal vez sea menos complicado de lo que creo, pero hasta ahora parece mejor tomar el código del lado de JS, si hubiera alguna manera fácil de obtenerlo...
Eche un vistazo al archivo Juypter cell.js
aquí : enumera las funciones que Jupyter usa para interactuar con las células. En particular, la función get_text()
devolverá el contenido de una celda. (esto funciona en todos los tipos de celdas; eche un vistazo al archivo codecell.js
para conocer las funciones específicas de las celdas de código solamente)
Una forma rápida de probar esto en el navegador: acceda a la instancia del notebook
del objeto Jupyter
global para obtener la primera celda del cuaderno:
var cell = Jupyter.notebook.get_cell(0);
Ahora que tenemos la celda, ¡podemos leer el código dentro de ella! Usar:
var code = cell.get_text();
EDITAR: puede guardar este resultado en una variable de Python usando la función Javascript
para ejecutar Javascript en una celda de Python e IPython.notebook.kernel.execute
para ejecutar Python en Javascript; esto se usa para configurar la variable con el nombre del código. Tenga en cuenta que tiene que escapar caracteres como comillas para usar encodeURI para realizar la codificación/descodificación de 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)