系统相关
首页 > 系统相关> > 使用shell_exec从PHP中调用Python

使用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 postfix意味着脚本输入了一个url.

非常感谢你提前!

解决方法:

您是否尝试在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’

标签:shell-exec,python,php,shell,post
来源: https://codeday.me/bug/20191008/1874514.html