关于jquery:从Javascript调用Python脚本

Call Python Script from Javascript

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

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

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

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

编辑

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

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

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

如何使用Javascript调用此python文件?


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

您向服务器发出POST请求的方向正确。

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

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

进行网址路由的不同框架的一些示例:

Python:

  • CherryPy:http://docs.cherrypy.org/en/latest/tutorials.html#tutorial-9-data-is-all-my-life
  • Flask:http://flask.pocoo.org/docs/0.10/quickstart/
  • 较低级别的python的较长列表:http://wsgi.readthedocs.org/en/latest/libraries.html

NodeJ:

  • 快递:http://expressjs.com/guide/routing.html
  • Koa:https://github.com/koajs/route
  • 哈皮(Hapi):http://hapijs.com/tutorials/routing

这个问题也很好:JSON,REST,SOAP,WSDL和SOA:它们如何链接在一起

您可以通过浏览器执行此操作的另一种方法是使用套接字,该套接字将打开客户端与服务器之间的连接。

在javscript中,您可以使用socketio:

1
2
3
4
5
<script src='/socket.io/socket.io.js'>

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

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

1
2
3
4
5
6
7
8
9
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)

看起来还有一个专门用于烧瓶的版本:https://flask-socketio.readthedocs.org/en/latest/

或者您可以通过使用编译器将python转换为javascript直接在浏览器中运行python:

  • http://www.skulpt.org/

或者,您可以使用节点javascript生成运行python脚本的子进程:

  • https://stackoverflow.com/a/20973067/2026508

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

  • 使用node-python从python托管的Web应用程序执行python脚本?