从AJAX或JQuery运行Python脚本

rit*_*art 15 javascript python ajax jquery parameter-passing

我们需要从Javascript运行python脚本.我们必须将输入String作为参数传递给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
Run Code Online (Sandbox Code Playgroud)

如何从上面的python中的ajax调用中访问'param',并将该值用作参数?

使用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);
});
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

编辑

正如所建议的那样,我试图让我的代码使用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)
Run Code Online (Sandbox Code Playgroud)

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

Vla*_*lin 5

您的Ajax调用将是(http)对python脚本的Web请求,因此您的python脚本需要在端口上侦听此类请求并进行响应.

建议使用上面提到的方法,在样本中使用简单的Web服务器,py或者你可以使用现有的,如Flask(或许多其他).

仅供参考 - 对于您的简单任务,我不建议使用Django(它是一个庞大而繁重的Web框架,有很多你不需要的铃声).


rit*_*art 2

从字段获取数据应按如下方式完成:

# Get data from fields
output = data.getvalue("param")
Run Code Online (Sandbox Code Playgroud)

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