让JavaScript执行Python脚本

6

我有一个问题,这个问题在这里和其他地方的互联网上已经被问了好几次*,但是我看到的答案不完整或者无效。

我想要一个JavaScript函数runPy(),当它被调用时(比如通过浏览器中的按钮点击),将在我的服务器上执行一个名为test.py的Python脚本。

假设test.py只是简单地创建一个文本文件并在其中写入'hello world'

Python

f = open('test.txt', 'w+')
f.write('hello world')

根据其他回答,我将以下JavaScript/jQuery函数拼凑在一起:

JavaScript

function runPy() {
    $.ajax({
        type:'POST',
        url:'test.py',
        success: function(data) {                                                     
            console.log(data)
        };
    });
}

现在,显然这是不正确的。正如我们所预期的那样,它并没有运行Python脚本,而是将脚本的内容打印到控制台:

控制台

f = open('test.txt', 'w+')
f.write('hello world')

我该如何编辑我的JavaScript(和/或Python)以实现我想要的功能?在完美的世界中,我希望避免导入任何新的依赖项(我看到有些答案依赖于Flask或Django),但当然讨饭的人不能挑食。
此外,如果我可以贪心一点,很好的是能够将参数传递给Python脚本,甚至使用JavaScript调用Python脚本中的特定函数,并将结果传递回客户端JavaScript。
*类似问题
从JS调用Python函数
如何从JavaScript调用Python脚本?
从JavaScript函数运行Python脚本

你可能找不到好的答案,因为你使用了错误的搜索词。如果我理解正确,你想在Web服务器接收特定请求时在服务器端执行Python脚本。这需要在服务器端进行配置,可以通过cgi或者让你的服务器端逻辑为某些路由执行Python脚本来实现。 - visibleman
你可以使用内置的 http.server 来向 http 服务器发送请求,而不是直接访问 Python 文件。你可以根据请求 URL 在服务器内部执行任何 Python 代码。你可以通过 print 语句返回数据。是的,你甚至可以将参数作为 http 查询字符串或 post 数据传递。使用像 Flask 这样的库会更加容易。 - Himal
1个回答

3

你正在走上正确的道路。

但是,这里解释一下为什么POST不起作用。除了HTML文件类型外,对于服务器上的静态文件(例如random.js、random.css等),使用POST调用将打印出原始文件内容。 在这种情况下,您需要在服务器端处理后端代码。我不知道您使用的后端框架是哪个,但以下是一些可以帮助您解决此问题的文章:

NodeJS: https://medium.com/swlh/run-python-script-from-node-js-and-send-data-to-browser-15677fcf199f

.NET: https://medium.com/better-programming/running-python-script-from-c-and-working-with-the-results-843e68d230e5

Java: Running a .py file from Java

更新!!: 由于Web开发领域的最新发展,现在可以通过WebAssembly在客户端运行Python。请在此处查找更多指令:Pyodide


更新:由于Web开发领域的最新进展,现在可以通过WebAssembly在客户端上运行Python。请在此处查找更多说明:Pyodide - Venkatesh Gunda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接