gpt4 book ai didi

python - 无法从Notebook中的Javascript调用Python函数

转载 作者:行者123 更新时间:2023-12-03 16:01:13 26 4
gpt4 key购买 nike

我想在Jupyter Notebook中调用函数say_hello

def say_hello():
print('hello')

%%javascript
//What have been tried
// Method 1
var kernel = IPython.notebook.kernel;
kernel.execute("say_hello()", {"output": callback});

// Method 2
Jupyter.notebook.kernel.execute("say_hello()")
两种方法都在浏览器控制台中抛出 ReferenceError
VM5326:7 Uncaught ReferenceError: IPython is not defined
at send_message (<anonymous>:7:22)
at onClickSendMessage (<anonymous>:12:9)
at HTMLButtonElement.onclick (app.ipynb:1)
版本:JupterLab 3.5,IPython 7.16,Python 3.9.1

最佳答案

您获取的ReferenceError是由Jupyter Lab中根本无法使用的Jupyter和IPython全局变量引起的。您必须自己write a JupyterLab extension
这些东西在Jupyter Notebooks中确实有效。您尝试的两种方法都是一个不错的开始,但是还需要一些改进。
我们需要3个单元-Python,HTML和JS。

  • 让我们只定义要在Python中从JS调用的方法。

  • def say_hello():
    print('hello')
  • 我们需要创建一个单元输出,JS将在其中写入执行结果。

  • %%html
    <div id="result_output">
  • 我们执行Python函数,并在回调中处理执行结果。从回调中,我们将结果文本填充到上面创建的输出中。

  • %%javascript
    const callbacks = {
    iopub: {
    output: (data) => {
    // this will print a message in browser console
    console.log('hello in console')

    // this will insert the execution result into "result_output" div
    document.getElementById("result_output").innerHTML = data.content.text
    }
    }
    };

    const kernel = Jupyter.notebook.kernel
    kernel.execute('say_hello()', callbacks)
    一些注意事项:
  • 如果您不需要查看结果,执行第二个方法就足够了,执行将被执行,只是不处理内核的结果(您可以在Websocket请求消息中的浏览器devtools的“网络”选项卡中看到)
  • 方法1中的
  • 您使用callback,但未定义它-这将导致另一个ReferenceError
  • 与JS中的相比,使用 const is better
  • varJupyter.notebook.kernel
  • 相同

    关于python - 无法从Notebook中的Javascript调用Python函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65823331/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com