想问一下,因为我正在设计一个网页,其中会有一些按钮,按下时会运行不同的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";
?>
答案 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";
?>