执行一些 python 脚本 PhP 不起作用
Executing a few python scripts with PhP not working
想问一下,因为我正在设计一个网页,其中会有几个按钮,当按下这些按钮时会 运行 不同的 python 脚本。
现在我尝试了一个基本的例子,通过使用 jquery 和 php 将命令传递给 运行 只有一个 python 脚本首先打印出来终端控制台中的 hello world 但它不工作。我尝试搜索但似乎无法找到解决方案。有什么帮助吗? (其中一个是关于使用 fast-cgi 的?任何人都可以对此有所了解吗?)
注意:
-我正在 Mac OS X 上编码并使用 XAMPP 但将通过安装 LAMPP 将此代码移植到 raspberry pi。 (因此,如果命令行和建议对于两个 OS 不同,我们将不胜感激)
我的代码:
下面是我在按下按钮时创建按钮的代码运行一个简单的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";
?>
您不想在这里使用 escapeshellcmd
。该函数用于转义参数,以便用户无法输入 foo;reboot
并使您的系统重新启动。但是,由于您没有任何用户输入,因此不需要它。
相反你想要:
$output = shell_exec("python z_admin_face/testPyscript.py");
嗯,如果我稍微更改您的 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";
?>
想问一下,因为我正在设计一个网页,其中会有几个按钮,当按下这些按钮时会 运行 不同的 python 脚本。
现在我尝试了一个基本的例子,通过使用 jquery 和 php 将命令传递给 运行 只有一个 python 脚本首先打印出来终端控制台中的 hello world 但它不工作。我尝试搜索但似乎无法找到解决方案。有什么帮助吗? (其中一个是关于使用 fast-cgi 的?任何人都可以对此有所了解吗?)
注意: -我正在 Mac OS X 上编码并使用 XAMPP 但将通过安装 LAMPP 将此代码移植到 raspberry pi。 (因此,如果命令行和建议对于两个 OS 不同,我们将不胜感激)
我的代码:
下面是我在按下按钮时创建按钮的代码运行一个简单的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";
?>
您不想在这里使用 escapeshellcmd
。该函数用于转义参数,以便用户无法输入 foo;reboot
并使您的系统重新启动。但是,由于您没有任何用户输入,因此不需要它。
相反你想要:
$output = shell_exec("python z_admin_face/testPyscript.py");
嗯,如果我稍微更改您的 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";
?>