使用 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 脚本不起作用的主要内容,如果未能解决你的问题,请参考以下文章