如何从JavaScript变量传递给蟒蛇在Jupyter?

问题描述 投票:3回答:3

据我了解,我应该能够打印可变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

我试图用this answer但努力使其发挥作用。

FWIW,这是(按PIP)在Fedora 23上运行哪些先决条件,使这项工作的最新Jupyter代码?

python ipython jupyter jupyter-notebook
3个回答
10
投票

这是我如何使你的代码工作:enter image description here

或者更简单:

enter image description here


3
投票
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的原因需要一些时间来工作,并在打印的值设置甚至之前。睡眠,3秒的等待时间似乎不够,变量被分配。


1
投票

这里的问题是,HTML对象是不是在细胞中的最后一个。因此,它是在不显示没有打印任何其他值相同的方式被忽略,除非它是最后一个单元格。如果你的下一个代码执行单元,你将不会看到任何警告窗口。

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

确保在单元格中的最后一个对象是HTML对象,你会看到警告窗口。

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

这就是为什么安东尼·佩罗工作的例子,它们是分开的细胞。这也应该工作:

HTML and print in separated cells

© www.soinside.com 2019 - 2024. All rights reserved.