使用AJAX调用从PHP运行Python脚本

时间:2013-07-21 05:38:16

标签: php python ajax cgi-bin

你好我有一个python脚本,我试图从客户端使用这样的AJAX调用从PHP运行:

$.ajax({
async: false,
cache:false, 
url:"callpython.php",
type: "POST",
data: "data1=" + path + "&data2=" + clr[k0], 
success: function (response) {
console.log(response);
}});

callpython.php内的代码是:

<?php
exec("python myscript.py",$return);
echo json_encode($return);
?>

并且myscript.py内的代码是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import string
import cgi, cgitb
from lxml import etree
from PIL import Image

pet="images/rock1.png"
petColor="59A678"
.//The rest of the code that populates the variables printed down below
.
.
.
print "Content-type: text/html"
print 
print eyeSize
print displacementX
print displacementY
print distance
print textX
print textY 
print sizeText
print colorText

作为Ajax结果,我得到:Array

当我从控制台运行php代码时:php callpython.php它执行python脚本,它给了我:["Content-type: text\/html","","30","37","47","20","27","40","20","#91806F"] 但是当使用ajax Firebug调用同一个php文件时,我显示:[]结果。

那么请问我如何在Ajax调用中获得与控制台结果相同的结果?

感谢。

2 个答案:

答案 0 :(得分:2)

作为第一步,我会尝试从python输出json。你从python目前得到的是一堆行(单个字符串),而不是一个有效的json可编码列表。此外,您不需要数据中的Content-Type,因为它是在HTTP中使用的标头。相反,试试这个:

<强> PYTHON

import json
...
data_out = [eyeSize, displacementX, ...]
print json.dumps(data_out)

<强> PHP

exec("python myscript.py",$return);
echo $return;

答案 1 :(得分:0)

尝试设置标题如下,

header("Content-Type: application/json; charset=utf-8", true);
echo json_encode($response);