从 AJAX 或 JQuery 运行 Python 脚本

Posted

技术标签:

【中文标题】从 AJAX 或 JQuery 运行 Python 脚本【英文标题】:Run Python script from AJAX or JQuery 【发布时间】:2014-10-09 19:05:17 【问题描述】:

我们需要从 javascript 运行 python 脚本。我们必须将输入字符串作为参数传递给 Python 脚本,并将 Python 输出显示到我们的网页上。

这是 Python 代码,当我在我的 linux 机器中运行此代码时,此代码可以正常工作:./sample.py 12345,给出输出 12345./sample.py 将显示 no argument found

#!/usr/bin/env python

import os
import sys

if len(sys.argv) > 1:
  output = sys.argv[1]
else:
  output = "no argument found"

print "Hello World!!!"
print output

如何从上述 python 的 ajax 调用中访问“参数”,并将该值用作参数?

Javascript:

$.ajax(
        type: 'POST',
        url: "scripts/sample.py",
        data: param: xyz, //passing some input here
        dataType: "text",
        success: function(response)
           output = response;
           alert(output);
        
).done(function(data)
    console.log(data);
    alert(data);
);

任何帮助将不胜感激。

编辑

按照建议,我正在尝试使用 CGI 让我的代码正常工作。

#!/Python34/python

# Import modules for CGI handling 
import cgi, cgitb

# Create instance of FieldStorage 
data= cgi.FieldStorage()

# Get data from fields
output = data["param"]

# This will print to stdout for testing
print("Hello World!!!")
print(output)

每当运行 Ajax 调用时,响应为:[object htmlDivElement],在 Firebug 中打开时会显示 Python 脚本的整个文本。我在这里错过了什么?

【问题讨论】:

你需要你的 python 接受 http 请求,而不是控制台解释 如何将参数值从 Ajax 获取到 Python 中?如果我的问题太“基本”,请道歉。 您要么需要设置一个小型网络服务器(使用 Flask 或 Django 之类的东西),要么可能使用 cgi 之类的东西来获取 post 参数。 你应该让你的服务器执行python脚本,阅读这个文档docs.python.org/2/howto/webservers.html @snotwaffle 我按照您的建议添加了答案。谢谢。 【参考方案1】:

您的 Ajax 调用将是对 Python 脚本的 Web 请求 (http),因此您的 Python 脚本需要在端口上侦听此类请求并做出响应。

建议使用上述方法,在您的示例中使用简单的web server,py 或者您可以使用现有的方法,例如 Flask(或许多其他方法)。

仅供参考 - 对于您的简单任务,我不推荐 Django(它是一个大而重的 Web 框架,有很多您不需要的铃铛)。

【讨论】:

【参考方案2】:

从字段中获取数据应该如下完成:

# Get data from fields
output = data.getvalue("param")

另外,我意识到在尝试执行时存在 ^M 个字符问题,我使用 vi 编辑器解决了这个问题。

【讨论】:

【参考方案3】:

在完全透明的情况下,我是这个 GitHub 存储库的贡献者。我能够使用 WayScript AJAX 触发器解决这个问题:

有关说明,请参阅 GitHub 存储库:https://github.com/wayscript/ajax-to-python-example

【讨论】:

以上是关于从 AJAX 或 JQuery 运行 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

通过ajax从python返回unicode字符串

CORS - jQuery 获取 ajax 响应状态失败

jQuery AJAX 轮询 JSON 响应,基于 AJAX 结果或 JSON 内容进行处理

从 nodeJS 解释器使用 jQuery ajax

jQuery AJAX 方法

Jquery $.get 或 $.ajax 在 Internet Explorer 中不起作用