首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyodide runPythonAsync to html文档

Pyodide runPythonAsync to html文档
EN

Stack Overflow用户
提问于 2021-04-12 05:36:48
回答 1查看 130关注 0票数 1

我正在尝试运行一个简单的pyodide示例,但对javascript或pyodide不是很熟悉,也不确定为什么输出是未定义的。这条语句执行得很好,因为我可以在控制台日志中看到正确的输出,但是我不能将输出赋给文档。

以下是代码

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript">
        window.languagePluginUrl = 'https://cdn.jsdelivr.net/pyodide/v0.17.0a2/full/';
    </script>
    <script src="https://cdn.jsdelivr.net/pyodide/v0.17.0a2/full/pyodide.js"></script>
</head>

<body>
  <p>You can execute any Python code. Just enter something in the box below and click the button.</p>
  <textarea id='code' style='width: 50%;' rows='10'>print('hello')</textarea>
  <button onclick='evaluatePython()'>Run</button>
  <br>
  <br>
  <div>
    Output:
  </div>
  <textarea id='output' style='width: 50%;' rows='3' disabled></textarea>

  <script>
    const output = document.getElementById("output");
    const code = document.getElementById("code");

    // show output
    function addToOutput(s) {
      output.value =  s;
      
    }

    function evaluatePython() {
      let output = pyodide.runPythonAsync(code.value)
        .then(output => addToOutput(output))
        .catch((err) => { addToOutput(err)});
    }
  </script>
</body>

</html>

我在这里大致遵循了另一个示例-- https://pyodide.org/en/stable/using_pyodide_from_javascript.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-13 08:37:08

基本上,您可以实现自己的打印函数。但是,如果您只想使用print,则可以覆盖JS中的函数:

代码语言:javascript
复制
languagePluginLoader.then(()=>{
  pyodide.globals.print = s => s
})

它只返回输入参数,因为它的输出将被写入容器(.then(output => addToOutput(output)))。当然,您可以实现任何自定义行为,例如将输入直接写入容器。

下面是完整的示例:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript">
        window.languagePluginUrl = 'https://cdn.jsdelivr.net/pyodide/v0.17.0a2/full/';
    </script>
    <script src="https://cdn.jsdelivr.net/pyodide/v0.17.0a2/full/pyodide.js"></script>
</head>

<body>
  <p>You can execute any Python code. Just enter something in the box below and click the button.</p>
  <textarea id='code' style='width: 50%;' rows='10'>print('hello')</textarea>
  <button onclick='evaluatePython()'>Run</button>
  <br>
  <br>
  <div>
    Output:
  </div>
  <textarea id='output' style='width: 50%;' rows='3' disabled></textarea>

  <script>
    const output = document.getElementById("output");
    const code = document.getElementById("code");

    // show output
    function addToOutput(s) {
      output.value =  s;
    }

    function evaluatePython() {
      let output = pyodide.runPythonAsync(code.value)
        .then(output => addToOutput(output))
        .catch((err) => { addToOutput(err)});
    }
    
    languagePluginLoader.then(()=>{
      // override default print behavior
      pyodide.globals.print = s => s
    })
  </script>
</body>

</html>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67050406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档