Skip to main content
 首页 » 编程设计

php之使用 shell_exec 从 PHP 中调用 Python

2025年05月04日23jyk

我的默认 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 的路径,直到它到达函数更长,因为它必须通过表单发布传递,而在我的同一文件夹测试案例中,我只是简单地声明了 $my_url)。 -u 后缀表示脚本输入一个 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'