使用 shell_exec 从 PHP 中调用 Python

Calling Python from within PHP using 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 对象(它应该 return 一个我应该通过 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 到达函数的路径更长,因为它必须通过表单-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 仅 returns 从标准输出 (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'