【问题标题】:Running Python script from PHP by using an AJAX call使用 AJAX 调用从 PHP 运行 Python 脚本
【发布时间】:2013-07-21 05:38:16
【问题描述】:

您好,我有一个 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 调用中获得与控制台结果相同的结果?

谢谢。

【问题讨论】:

    标签: php python ajax cgi-bin


    【解决方案1】:

    作为第一步,我会尝试从 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;
    

    【讨论】:

    • 嗨,谢谢你的回复,我按照你的建议做了,现在从控制台运行 php 脚本时,我得到:["[\"30\", \"37\", \"47\", \"20\", \"27\", \"40\", \"20\", \"#91806F\"]"],现在 AJAX 调用给了我:Array 而不是 @ 987654325@所以问题仍未解决。
    • 您好,我修复了它,这是我的 python 代码中的一个错误,我使用了 passthru() 函数而不是 exec() header("Content-type: text/html"); echo passthru("python eyes/cgi-bin/eyes.py");
    【解决方案2】:

    尝试如下设置标题,

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

    【讨论】:

    • 嗨,对不起,我得到的结果和以前一样:[]
    猜你喜欢
    • 2014-10-19
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2013-11-13
    • 2012-06-11
    相关资源
    最近更新 更多