【问题标题】:Execute python in a php script using shell_exec()使用 shell_exec() 在 php 脚本中执行 python
【发布时间】:2013-09-10 14:03:57
【问题描述】:

我在尝试在 php 服务器 (LAMP) 中执行 python 时遇到了一个奇怪的问题。 (安全模式关闭)

如果我输入:

$output = shell_exec("ls -lah");
echo "<pre>$Output</pre>";

我得到了ls 命令的结果。对于$output = shell_exec("tar --version"); 和其他应用程序(例如 gzip)也是如此。

但是,如果我切换到以下任何一行:

$output = shell_exec("python --version");
$output = shell_exec("python2.7 --version");
$output = shell_exec("/usr/bin/python --version");
$output = shell_exec("python my_script.py");

以及其他此类变体,我没有得到任何结果。该命令未执行,python 咬码未生成,echo 保持沉默。

我也尝试过使用exec() 命令,但没有成功。

【问题讨论】:

标签: php python


【解决方案1】:

如果您尝试使用以下代码运行 python 脚本

$output = shell_exec("python my_script.py");

您需要为 my_script.py 使用绝对路径,并为 python 文件授予所有权限(我不确定哪些足够)。

【讨论】:

    【解决方案2】:

    我认为你需要参考你的 python 的完整路径。

    例如改用这个:

    $output = shell_exec("/usr/bin/python full_path/my_script.py")
    

    代替:

    $output = shell_exec("python my_script.py");
    

    【讨论】:

      【解决方案3】:

      我认为这可能会有所帮助...

      看起来需要正确路由 python 调用的输出。 我能够在我的 index.php 文件中完成这项工作以返回 python 版本...

      shell_exec("python -V 2>&1");
      

      Here 是我找到答案的地方。

      【讨论】:

      • pdftk 也有同样的错误。但它解释了原因。 “/opt/lampp/lib/libstdc++.so.6:未找到版本‘GLIBCXX_3.4.9’(pdftk 需要)”。这可能是python的情况?让我尝试一下..
      • 也为我工作,但特别是对我来说,在由 CPanel 管理的共享主机中运行。我的 py 脚本位于 /public_html 根目录下,并使用 $out = shell_exec('python ../pyscr/script.py '.param1.' 2>&1');将 script.py 中的打印值放入 $out。
      【解决方案4】:

      我认为内核无法找到安装它的 python 的路径..如果你可以执行 echo $PATH..如果给定,它将显示要搜索命令的所有路径 在那里添加你的python部分,然后它可能会工作,或者你可以给出绝对路径(除了/usr/bin/)看看它是否有效..我也需要测试它。

      【讨论】:

      • ls 和 gzip 也可能正在工作,因为这些是系统命令..您使用的是独占命令或其他命令..一旦我在我的 hp ux 盒子上测试它会通知您
      • 嗨!感谢您的快速回复!我试过 echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/share/java/apache-ant/bin:/ usr/bin/vendor_perl:/usr/bin/core_perl python解释器位于/usr/bin/所以它应该找到它,不是吗?
      【解决方案5】:

      是什么

      which python
      

      告诉你,无论是从命令行还是从 shell_exec()?它应该告诉你它找到了哪个(如果有的话)Python 解释器(来自$PATH)。不要忘记,Linux 命令行中使用的 $PATH 很可能与 shell_exec() 使用的 $PATH 不同!一旦找到要使用的 Python 解释器,可能必须在 shell_exec() 中对其进行硬编码。

      【讨论】:

      • 嗨菲尔! which python 从命令行和 php 给出完全相同的答案:/usr/bin/python。问题可能不是来自这个...
      • 顺便说一句,shell_exec('echo $PATH'); 在控制台和终端中给出了相同的答案:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      【解决方案6】:

      很可能网络服务器没有适当的权限来执行 shell 命令。要解决此问题,请运行“sudo visudo”命令并将以下行添加到 sudoers 文件中:

      www-data ALL=NOPASSWD: ALL

      另外,确保 /var/www 目录属于 www-data 用户和组(使用 sudo chown -R www-data:www-data /var/www 设置正确的所有者)。详情在这里http://www.raspberry-pi-geek.com/Archive/2014/07/PHP-on-Raspberry-Pi

      另请参阅 Can't execute python script from php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        相关资源
        最近更新 更多