2014-05-04 67 views
1

我試圖從我的控制器執行Python腳本。在我的控制器目錄中,我創建了一個名爲pythonScripts的文件夾,其中放置了我的腳本。從我的控制器函數中,我從數據庫獲取數據,使用json格式,並將它傳遞給python以創建網絡,然後使用networkx對網絡進行一些分析。問題是我無法執行腳本。以下是我用於運行腳本的代碼。從Laravel 4控制器執行Python腳本

$output = array(); 
exec("/pythonScripts/createNetwork.py '{$connections}' ", $output); 
return json_encode($output); 

其中$connections是關於用戶與其他用戶的連接的JSON數據。

在python腳本中,此刻,我只打印出傳入的任何內容,以查看腳本是否正在執行,但作爲回報,我得到一個空數組[]。以下是我的python腳本。

import json 
import networkx as nx 
import sys 
from networkx.readwrite import json_graph 


def main(): 
    userJSONData = sys.argv[1] #the JSON format of user data will be passed into this script. 
    print userJSONData 


if __name__ == '__main__': 
    main() 

我不能告訴腳本是否正在執行......任何幫助?

+0

無關:解析JSON data:'data = json.loads(sys.argv [1])' – jfs

回答

3

你必須從你的腳本執行的返回值來檢查是否成功(== 0),如果你的腳本是不可執行的,你還必須調用Python:

exec("/usr/bin/python /pythonScripts/createNetwork.py '{$connections}'", $output, $return); 

if ($return) { 
    throw new \Exception("Error executing command - error code: $return"); 
} 

var_dump($output); 
+0

謝謝,我在firebug中得到了以下內容。 「type」:「Exception」,「message」:「執行命令時出錯 - 錯誤代碼:127 – Haseeb

+0

現在我的exec()和你的看起來一樣。 $ connections}'「,$ output,$ return); – Haseeb

+0

所以顯然'代碼127'意味着命令沒有找到......爲什麼它給了這個?? – Haseeb