【问题标题】:Calling Python from within PHP using shell_exec使用 shell_exec 从 PHP 中调用 Python
【发布时间】:2016-03-05 17:06:47
【问题描述】:

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

非常感谢您!

【问题讨论】:

    标签: php python shell post shell-exec


    【解决方案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 将标准错误重定向到标准输出。见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'

    【讨论】:

    • 非常感谢您的广泛回答!但是,不幸的是,这并没有解决我的问题:/还有什么你能想到的吗?会不会是帖子消毒破坏了网址?
    • 添加了2>&1$response 的值是多少?我认为这是一个权限问题。
    • 老兄,请给自己一个拥抱……shell_exec 中的 2>&1 运行良好,我终于可以调试我的代码了……非常感谢 mcuc!
    • 你也可以看看这个吗? stackoverflow.com/questions/35830893/…
    猜你喜欢
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2020-09-04
    • 2016-07-01
    • 2012-09-05
    相关资源
    最近更新 更多