使用 PhP 执行一些 python 脚本不起作用

Posted

技术标签:

【中文标题】使用 PhP 执行一些 python 脚本不起作用【英文标题】:Executing a few python scripts with PhP not working 【发布时间】:2015-11-28 14:35:18 【问题描述】:

想问一下,因为我正在设计一个网页,其中会有几个按钮,当按下时将运行不同的 python 脚本。

现在我尝试了一个基本示例,使用 jquery 和 php 传递命令以首先运行一个 python 脚本,该脚本在终端控制台中打印出 hello world 但它不起作用。我尝试过搜索,但似乎找不到解决方案。有什么帮助吗? (其中一个是关于使用 fast-cgi?任何人都可以对此有所了解吗?)

注意: -我在 Mac OS X 上编码并使用 XAMPP,但将通过 LAMPP 安装将此代码移植到树莓派。 (因此,如果两个操作系统的命令行和建议不同,我们将不胜感激)

我的代码:

下面是我在按下按钮时创建一个按钮的代码,它运行一个简单的 python 脚本

Main.php

<!DOCTYPE html>
<html>
<head>
 <script type="text/javascript" src="js/general_v2.js"></script>
</head>

    <body>

        <button id="button_py1" type="button">Press to test Py</button>

 </body>
 </html>

下面是general_v2.js的代码

$(document).ready(function()
  $('#button_py1').click(function() 
  e.preventDefault();

  $.ajax(
   type: "POST",
   url: "z_py/py_run.php",


   success: function(output_string)
    console.log("js_success");

   ,
   error:function(err)
    //handle error
    alert('Error submitting form' + err);
   

);    
);
);

下面是py_run.php的代码

<?php
        $command = escapeshellcmd("python z_py/testPyscript.py");
        $output = shell_exec($command);
        echo $output;
        echo  "php_works";

?>

python 文件:

#! /usr/bin/env python

print "hello world python script"

编辑: - 我尝试通过键入 url 路径名直接执行脚本,它也不起作用(它确实打印出随机测试消息,所以我相信它不是文件上的权限错误。) -关于执行python的php代码,我不熟悉使用它(我在论坛上发现(不记得在哪里但我试过但不起作用),也发现了exec命令并尝试了如下所示和它也不起作用:

这是我使用 exec (py_run.php) 的替代尝试

<?php
        $command = "python z_py/testPyscript.py";
        exec($command);

?>

已解决! 感谢@Shawn Mehan

解决办法是python文件已经和php文件在同一个目录下,去掉路径名即可解决问题。

更新代码:

<?php
        $command = escapeshellcmd("/usr/bin/python testPyscript.py");
        $output = shell_exec($command);
        echo $output;
        echo  "php_works";

?>

【问题讨论】:

【参考方案1】:

你不想在这里使用escapeshellcmd。该函数用于转义参数,以便用户无法输入foo;reboot 并让您的系统重新启动。但是,由于您没有任何用户输入,因此您不需要它。

相反,你想要:

$output = shell_exec("python z_admin_face/testPyscript.py");

【讨论】:

保持警惕没有坏处。 escapeshellcmd 没有伤害任何东西,所以为什么不离开它呢? 尝试像@Shawn 建议的那样包含 python 二进制文件的完整路径,以及 python 脚本的完整路径。我怀疑您在运行 php 脚本时已经在“z_py”目录中 @ShawnMehan 将其转义为 python\ z_py/whatever,这意味着它将尝试执行名为 python z_py/whatever 的文件,而不是使用参数 python 的文件 z_py/whatever【参考方案2】:

好吧,如果我稍微更改你的 py_run.php 以包含 python 的路径,你的代码对我有用,例如:

<?php
        $command = escapeshellcmd("/path/to/python/python z_admin_face/testPyscript.py");
        $output = shell_exec($command);
        echo $output;
        echo  "php_face2";

?>

【讨论】:

我尝试用这个替换 $command = escapeshellcmd("/usr/bin/python z_admin_face/testPyscript.py"); 这是 mac os x 的正确路径吗? “/usr/bin/python”因为当我输入完整路径时,终端窗口中没有打印任何内容 在 cmd 行中尝试 which python 以查看您的 python 所在的位置。而且,正如@Shel 所写,您需要确保您有足够的路径可以到达testPyscript.py。为了方便您继续遇到问题,请将 pyscript.py 与 py_run.php 放在 same 目录中以消除任何路径问题。 它在 /usr/bin/python 中,是的,py 和 php 文件都在同一个目录中,它仍然不起作用。奇怪;( 呃。您遇到的问题与您的代码无关。如果将 $command 替换为 $command = escapeshellcmd("which python"); 会发生什么

以上是关于使用 PhP 执行一些 python 脚本不起作用的主要内容,如果未能解决你的问题,请参考以下文章

用于发送邮件的 php 脚本在通过浏览器执行时不起作用,但在从命令行执行时工作正常

包含 PHP 文件后脚本不起作用

PHP GoDaddy 最大执行时间不起作用

从php执行时mssql批量插入不起作用

依赖于 dlib 的 python 可执行文件不起作用

相对路径在 cron PHP 脚本中不起作用