2013-07-21 105 views
0

你好,我有我試圖從PHP從客戶端使用AJAX調用像這樣運行python腳本:通過使用AJAX調用從PHP運行Python腳本

$.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 

作爲阿賈克斯的結果我得到:Array

當我運行從控制檯的PHP代碼:php callpython.php它執行python腳本,這讓我:["Content-type: text\/html","","30","37","47","20","27","40","20","#91806F"] 但調用時,使用AJAX螢火蟲相同的php文件顯示我:[]的結果。

那麼請您如何才能在Ajax調用中獲得與控制檯結果相同的結果?

謝謝。

回答

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; 
+0

您好,感謝您的答覆,我按照你的建議,現在運行php腳本fr om console我得到:'[「[」30「,」37「,」47「,」20「,」27「,」40「,」20「 ,「#91806F \」]「]'現在AJAX調用給我:'Array'而不是'[]',所以問題仍然沒有解決。 – OussamaLord

+0

您好我修復它,這是我的Python代碼中的錯誤,我用'passthru()'函數而不是'exec()''header(「Content-type:text/html」); echo passthru(「python eyes/cgi-bin/eyes.py」);' – OussamaLord

0

嘗試設置如下頭,

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

嗨,很抱歉,我得到和以前一樣的結果:'[]' – OussamaLord