【问题标题】:Call Python Script from Javascript从 Javascript 调用 Python 脚本
【发布时间】:2016-03-02 07:15:57
【问题描述】:

我在一个 Dreamhost 服务器上,并且有一些 HTML 会在按下按钮时调用一些 javascript。点击此按钮时,我正在尝试调用 python 脚本。

首先,据我所知,由于我在共享主机上,因此无法使用 AJAX,因为它不受支持,因此我需要在没有 AJAX 的情况下执行此操作。现在我正在尝试做一个正在工作的XMLHttpRequest

我也意识到做XMLHttpRequest 不是最好的方法,因为文件都在服务器上,必须有办法直接调用文件吗?

因此,如果有人打电话告诉我如何直接调用它或帮助我在浏览器控制台中修复此错误,那就太好了。 感谢您的帮助

编辑

我有一个 HTML 文件,当用户点击该文件上的按钮时,它会调用 HTML 文件中的一些 javascript。此 javascript 当前向位于同一服务器上的 python 脚本和 HTML 文件发出 POST 请求。

我想要什么,而不是向服务器上的 python 文件发出 post 请求,我只想在 HTML 文件中单击按钮时直接从运行的 javascript 调用 python 文件。

包含 javascript 的 HTML 文件和 python 文件都在同一台服务器上。而且我不希望python在浏览器中运行,我希望它在服务器后台运行。

如何使用 Javascript 调用这个 python 文件?

【问题讨论】:

  • 您是否使用任何类型的中间件来执行服务器端路由?您使用的是 nodejs/express、python/(cherrypy, flask) 还是其他类似 nginx/apache 的东西?我知道在浏览器中运行“python”的唯一方法是使用一个单独的库,将 python 转换为 javascript。
  • @jm_____ 我不想让 python 在浏览器中运行我只想在服务器上被调用,你知道我在说什么吗?现在我只是通过 POST 请求执行此操作,但文件位于同一服务器上,所以我想不使用该帖子,但我不需要它在浏览器中运行
  • 哪些文件在同一台服务器上?您能否在问题中包含一个示例,并说明您的文件结构?
  • @jm_____ 我刚刚在编辑中解释过
  • stackoverflow.com/questions/89228/… - 您需要将调用 ajax 到服务器

标签: javascript jquery python html ajax


【解决方案1】:

据我了解您的问题,您要执行的操作称为“远程过程调用”或某种面向服务的体系结构 (SOA)。

您在向服务器发出POST 请求时处于正确的轨道上。

当您发送 GET、PUT、POST ... 请求时,您可以设置像flask 或cherrypy 之类的中间件来运行脚本。在中间件控制器内部,您可以调用您的脚本。

基本上,您已经开始创建一个 RESTful api,这是当今在后端运行逻辑的一种非常标准的方式。

做url路由的不同框架的一些例子:

Python:

NodeJs:

这个问题也很好:JSON, REST, SOAP, WSDL, and SOA: How do they all link together

您可以从浏览器执行此操作的另一种方法是使用套接字,它会打开客户端和服务器之间的连接。

在 javscript 中你可以使用 socketio:

<script src='/socket.io/socket.io.js'></script>
<script>
    var socket = io();
    socket.connect('http://localhost:8000')
    socket.emit('run_a_script_event', {arg1: 'hello', arg2: 'world'});
</script>

并且在您的 python 代码中,您可以使用用于 python 的 socketio 客户端 (https://pypi.python.org/pypi/socketIO-client):

from your_module import thescript
from socketIO_client import SocketIO, LoggingNamespace

def run_a_script(*args):
    print('arg1 and arg2', args)
    thescript()

socketIO = SocketIO('localhost', 8000, LoggingNamespace)
socketIO.on('run_a_script_event', run_a_script)

貌似还有专门针对flask的版本:https://flask-socketio.readthedocs.org/en/latest/

或者你可以直接在浏览器中运行python,通过转译器将它转换为javascript:

或者您可以使用 node javascript 来生成一个运行 python 脚本的子进程:

或者您可以将 python 脚本导入节点,例如:

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2014-06-25
    • 2018-03-25
    • 2021-10-19
    相关资源
    最近更新 更多