使用PhP执行一些python脚本无法正常工作

时间:2015-09-02 22:22:23

标签: php jquery python xampp lampp

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

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

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

我的代码:

以下是我在按下时创建按钮的代码,它运行一个简单的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代码,我不熟悉使用它(我发现在forumn上(不记得在哪里但我尝试过并且不起作用),也发现了关于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";

?>

2 个答案:

答案 0 :(得分:0)

您不想在此处使用$output = shell_exec("python z_admin_face/testPyscript.py"); 。该函数用于转义参数,以便用户无法输入<%= form_for(@item, html: {class: 'form-horizontal form dropzone', multipart: true}) do |f| %> <%= token_tag(nil) %> <%= f.file_field :image, class: 'img-input', accept: 'image/png, image/jpeg, image/jpg', multiple: false %> <%= f.submit 'Done', class: 'btn btn-primary btn-lg btn-block item-submit' %> <% end %> 并重新启动系统。但是,由于您没有任何用户输入,因此您不需要它。

相反,你想:

$(document).ready(function() {

  // disable auto discover
  Dropzone.autoDiscover = false;

  var dropzone = new Dropzone (".dropzone", {
    maxFiles: 1, 
    maxFilesize: 1, 
    paramName: "item[image]",
    addRemoveLinks: true, 
    clickable:'#dropzonePreview',
    previewsContainer: '#dropzonePreview',
    thumbnailWidth: 300,
    thumbnailHeight: 300,
    autoProcessQueue: false,
    uploadMultiple: false
  });

  $(".item-submit").click(function (e) {
    e.preventDefault();
    e.stopPropagation();
      dropzone.processQueue();
    }
  );

});

答案 1 :(得分:0)

好吧,如果我稍微改变你的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";

?>