如何在 Jupyter 中将变量从 javascript 传递到 python?

How to pass variables from javascript to python in Jupyter?

据我了解,我应该能够在下面的代码片段中打印变量 foo

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

相反,我看到了这条错误消息:

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

NameError: name 'foo' is not defined

我正在尝试使用 但很难让它发挥作用。

FWIW,这是 Fedora 23 上的最新 Jupyter 代码(根据 pip)运行。实现此功能的先决条件是什么?

这就是我让你的代码工作的方式:

或更简单:

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)

这样做的原因是 HTML 需要一些时间才能工作,并且您甚至在设置值之前就打印了它。有sleep,3s的等待时间似乎就够了,变量就赋值了。

这里的问题是 HTML 对象不是单元格中的最后一个对象。因此它会以相同的方式被忽略,除非它是单元格中的最后一个值,否则不会显示任何其他没有打印的值。 如果您使用下一个代码执行单元格,您将不会看到任何警报 window.

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

确保单元格中的最后一个对象是 HTML 对象,您将看到警报 window。

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

这就是 Anthony Perot 的例子起作用的原因,它们是分开的单元格。 这也应该有效:

如果您的 js 代码中有一个函数需要一些参数并且您想从 Jupyter Notebook 调用它,您可以执行以下操作:

from IPython.display import HTML, Javascript

HTML('<script src="./yourfile.js"></script>
Javascript('yourFunction(%s)' % parameter)

在这种情况下,您使用的是 pandas 的数据框,最后一行应如下所示:

Javascript('yourFunction(%s)' % parameter.to_json(orient='records'))

链接:

您可以选择格式函数而不是“%”