Según tengo entendido, debería poder imprimir la variable foo en el fragmento a continuación.

from IPython.display import HTML
HTML('''
    <script type="text/javascript">
        IPython.notebook.kernel.execute("foo=97")
    </script>
     ''')
print(foo)

En cambio, veo este mensaje de error:

NameErrorTraceback (most recent call last)
<ipython-input-2-91b73ee49ec6> in <module>()
      5     </script>
      6      ''')
----> 7 print(foo)

NameError: name 'foo' is not defined

Estoy tratando de usar esta respuesta pero estoy luchando para que funcione.

FWIW, este es el último código Jupyter (según pip) que se ejecuta en Fedora 23. ¿Cuáles son los requisitos previos para que esto funcione?

6
John Schmitt 11 may. 2016 a las 23:46

3 respuestas

La mejor respuesta

Así es como hice que tu código funcione: ingrese la descripción de la imagen aquí

O incluso más simple:

enter image description here

11
Anthony Perot 11 may. 2016 a las 21:25
from IPython.display import HTML
HTML('''
<script type="text/javascript">
    IPython.notebook.kernel.execute("foo=11")
</script>
 ''')
from time import sleep
sleep(3)
print(foo)

La razón por la que esto funciona es que el HTML tarda un tiempo en funcionar y lo imprime incluso antes de establecer el valor. Con el sueño, el tiempo de espera de 3 segundos parece ser suficiente y la variable se asigna.

3
SidML 11 dic. 2017 a las 18:02

El problema aquí es que el objeto HTML no es el último en la celda. Por lo tanto, se ignora de la misma manera que no se muestra ningún otro valor sin impresión, a menos que sea el último en la celda. Si ejecuta una celda con el siguiente código, no verá ninguna ventana de alerta.

HTML('''
    <script type="text/javascript">
        alert("hello")
    </script>
''')
print("hello")

Asegúrese de que el último objeto en la celda sea el objeto HTML y verá la ventana de alerta.

HTML('''
    <script type="text/javascript">
        alert("hello")
    </script>
''')

Es por eso que los ejemplos del trabajo de Anthony Perot son células separadas. Esto también debería funcionar:

HTML and print in separated cells

1
guiferviz 3 feb. 2019 a las 14:53