【问题标题】:how to invoke python code from javascript code如何从javascript代码调用python代码
【发布时间】:2021-06-20 11:30:34
【问题描述】:

我编写了下面的代码来从 Javascript 代码调用 python 代码,即按下某个按钮, 但是当我运行它时,我得到了完整的 python 文件作为输出而不是执行该文件。 有人可以指导我如何解决这个问题。

在这里遇到了类似的问题,但无法理解解决方案: Triggering Python script using AJAX Javascript request on local server using vanilla JS

我的代码:

const xhttp = new XMLHttpRequest();
                      xhttp.onreadystatechange = function() {
                        if (this.readyState == 4 && this.status == 200) {
                          alert(this.responseText);
                            
                            alert("hello from js");
                        }
                      };
                      xhttp.open("GET", "uploadFile.py");
                            
                      xhttp.send();

有人可以帮帮我吗?

问候

【问题讨论】:

  • 我需要让我的机器成为在某个端口上运行 Python 的本地服务器吗?我需要在那个端口上运行我的那个特定脚本还是只运行python ..我实际上对服务器端很陌生,因此我的问题可能非常基本..请多多包涵..
  • 您可以将数据从 JS 发送到 python 并接收回来,但是您想从中完成什么。为了正确使用,您必须使用一些框架,如 Flask 或 Django。运行基本的 http 服务器将无济于事,因为使 GET 或 POST 请求变得困难。

标签: javascript python


【解决方案1】:

您引用的线程似乎没有正确命名问题,因此您误认为 NodeJS 进程可以运行 python 脚本。

这也是假设您想在 nodeJS 进程上运行 python 脚本,而 在浏览器上运行,因为浏览器的 javascript 引擎不知道如何处理 .py 文件。

NodeJS 进程不能执行 python 脚本,但是 python3(假设它安装在您的服务器/环境中)可以。所以唯一的办法就是让NodeJS告诉shell环境让python3运行python脚本。

引用https://stackoverflow.com/a/52575123/4036876,实现它的一种方法是使用execSyncexec 通过python3 运行main.py

const execSync = require('child_process').execSync;
// import { execSync } from 'child_process';  // replace ^ if using ES modules
const output = execSync('python3 main.py', { encoding: 'utf-8' });  // the default is 'buffer'
console.log('Output was:\n', output);

【讨论】:

  • 还要继续回答答案,请通过对答案的评论而不是您的问题来回复
  • 一个问题:需要使用纯 javascript 工作吗?当我使用上面的代码时,它给了我错误:未捕获的错误:尚未为上下文加载模块名称“child_process”:_。使用 require([])
  • 你必须在你的节点进程中运行它,而不是在你的浏览器上。
  • 但我没有使用节点,我使用的是纯 HTML javascript
  • 如前所述,您的浏览器对如何处理 python 脚本一无所知。您必须将 python 脚本捆绑在一个函数中并通过运行该函数以响应传入请求的 flask/django 提供服务,或者在具有 python 的环境中的节点进程上运行您的 js。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多