使用shell_exec

时间:2016-03-05 17:06:47

标签: php python shell post shell-exec

我的默认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。

非常感谢你!

1 个答案:

答案 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代码

您可能希望在python脚本的第一行添加#!/usr/bin/env python并使其可执行chmod +x /var/www/include/sCrape.py。之后,您应该能够在不显式调用python的情况下运行脚本。 /var/www/include/sCrape.py -u '$my_url'