使用shell_exec从PHP内调用Python
问题内容:
我的默认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变量输入的,但是我现在试图完全禁用消毒以测试它是否可以工作,但是仍然没有(仍然,直到到达函数的url路径更长了) ,因为它必须通过form-
post传递,而在我的同一文件夹测试用例中,我只是声明了$ my_url)。-u后缀表示脚本输入一个URL。
提前非常感谢您!
问题答案:
您是否尝试/usr/bin/python /var/www/include/sCrape.py -u '$my_url'
在Shell中运行?错误可能在那里。
尝试:
$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。请参阅在shell中,“
2>&1”是什么意思?
。
运行python代码
您可能需要#!/usr/bin/env python
在python脚本的第一行添加内容并使它可执行chmod +x /var/www/include/sCrape.py
。之后,您应该能够运行脚本而无需显式调用python。/var/www/include/sCrape.py -u '$my_url'