我的默认Web应用程序基于PHP。但是,为了方便起见,我构建了一个python脚本来进行一些分析。现在我需要php来调用python代码并检索python代码提供的输出。两个文件都在同一个服务器上,但不在同一个文件夹中。我目前采用的方法不起作用,如下所示:
$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' ";
$response = shell_exec($cmd);
$response = json_decode($response, true);
现在当我尝试打印$ response时,我得到了NULL对象(它应该返回一个我应该通过json_decode解码的数组字符串)。我的功能有问题吗? php位于/ var / www / html /中。当两个文件位于同一目录中时,以下代码有效:
$cmd = "python sCrape.py -u '$my_url'";
$response = shell_exec($cmd);
$response = json_decode($response, true);
更多信息:my_url是从php输入的一个已清理的$ _POST变量,但我现在已经尝试完全禁用清理以测试它是否可行,但它仍然没有(仍然是网址'直到它到达函数的路径更长,因为它必须通过form-post传递,而在我的同一文件夹测试用例中我只是简单地声明$ my_url)。 -u postfix意味着脚本输入了一个URL。
非常感谢你!
答案 0 :(得分:1)
您是否尝试在shell中运行/usr/bin/python /var/www/include/sCrape.py -u '$my_url'
?可能存在错误。
尝试:
$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' 2>&1";
$response = shell_exec($cmd);
echo $response;
这应输出错误信息。
shell_exec
仅返回标准输出(stdout)的输出,如果发生错误,则将其写入“标准错误(stderr)”。 2>&1
将stderr重定向到stdout。请参阅In the shell, what does “ 2>&1 ” mean?。
您可能希望在python脚本的第一行添加#!/usr/bin/env python
并使其可执行chmod +x /var/www/include/sCrape.py
。之后,您应该能够在不显式调用python的情况下运行脚本。 /var/www/include/sCrape.py -u '$my_url'