从Laravel 4控制器执行Python脚本

1 投票
1 回答
3739 浏览
提问于 2025-04-18 05:22

我正在尝试从我的控制器执行一个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()

我不知道脚本是否在执行……有什么帮助吗?

1 个回答

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);

撰写回答