【问题标题】:Getting PHP to run a Python script让 PHP 运行 Python 脚本
【发布时间】:2010-02-08 06:41:41
【问题描述】:

我正在尝试使用 PHP 运行 Python 程序。这是代码

$command = '/usr/local/bin/python script.py file';
$temp = exec($command, $output);

这可以通过命令行工作,但不能通过浏览器运行。我正在使用 Apache,所以它可能需要正确的权限?我对 Linux 很陌生,不知道如何让它工作。

任何帮助将不胜感激!

编辑 1:

尝试使用proc_open,但没有任何反应。我给出了脚本的完整路径。使脚本可执行但没有运气。我可以在服务器上尝试其他任何事情吗? (这是一个 CentOS 5)

【问题讨论】:

  • 如果你有真正的流量,不要这样做。运行一个新的 python 脚本(没有 mod-python)会让你付出高昂的代价。设置一个单独的、长时间运行的 python 服务器(xml-rpc 服务器?),如果需要扩展,可以使用 IPC 调用它。
  • 谢谢!只是想将其作为演示完成。但是要绕过 mod_wsgi/mod_python

标签: php python exec


【解决方案1】:

您需要将完整路径传递给脚本,并且还需要确保运行 Web 服务器的用户可以读取该脚本(这意味着路径中的每个目录都必须是 Web 用户的 +x)。

【讨论】:

  • 只是为了涵盖所有基础,您实际上是在打印 $output,对吗?您还应该尝试确定您的 Web 服务器是否正在运行 chroot。
【解决方案2】:

意识到出了什么问题:

  1. 域被设置为虚拟主机并且启用了 PHP 的安全模式。我猜 proc_open、exec、system、passthru 等在 safe_mode 下不起作用。

  2. 将脚本放在 vhost 可访问的目录中。 Apache 无法访问 vhost 文档根目录之外的目录。

感谢您的帮助!

【讨论】:

    【解决方案3】:

    几个检查点

    • script.py 应该是完整路径,例如,/home/abhinav/script.py
    • script.py 应该是可执行的,chmod +x script.py

    【讨论】:

    • "script.py 应该是可执行的" 如果解释器被调用,则不会。
    • 谢谢,#!/usr/local/bin/python 需要在 script.py 的第一行
    • 用解释器调用脚本就不需要shebang了(python <filename>)
    • 我尝试给出脚本的完整路径。不工作。浏览器只显示一个空白页面,脚本执行结束。相同的脚本从命令行运行。
    【解决方案4】:

    为了让我的 CodeIgniter 助手运行 python 脚本,我必须将 #!/usr/bin/python 放在我的 python 脚本的第一行,而不是从 exec 调用 python。

    +1 也表示 chmod +x

    我的助手看起来像这样:

    <?php
        function scrape($site, $key, $user_id)
        {
            $cmd = str_replace('system/','',BASEPATH).APPPATH."python/spider.py -u $site -k $key -i $user_id";
            $resp = exec($cmd, $out);
            return $out;
        }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 2012-06-11
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多