从Laravel 4 Controller执行Python脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Laravel 4 Controller执行Python脚本相关的知识,希望对你有一定的参考价值。
我正在尝试从我的Controller执行Python脚本。在我的控制器目录中,我创建了一个名为pythonScripts的文件夹,其中放置了我的脚本。从我的控制器功能我以json格式从数据库获取数据,并将其传递给python以创建网络,然后使用networkx在网络上进行一些分析。问题是我无法执行脚本。以下是我运行脚本的代码。
$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)并且如果您的脚本不可执行,您还必须调用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);
以上是关于从Laravel 4 Controller执行Python脚本的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 4 - Route::resource 与 Route::controller。使用哪个?
在 laravel 5.4 中将变量从 Route 传递到 Controller 的最简单方法是啥?
Laravel 4:路由到 localhost/controller/action
Laravel 4无法从命名空间控制器中找到BaseController