8

我在尝试在 php 服务器(LAMP)中执行 python 时遇到了一个奇怪的问题。(安全模式关闭)

如果我输入:

$output = shell_exec("ls -lah");
echo "<pre>$Output</pre>";

我得到了ls命令的结果。对于$output = shell_exec("tar --version");其他应用程序也是如此,例如 gzip。

但是,如果我切换到以下任何一行:

$output = shell_exec("python --version");
$output = shell_exec("python2.7 --version");
$output = shell_exec("/usr/bin/python --version");
$output = shell_exec("python my_script.py");

和这种类型的其他变体,我没有得到任何结果。该命令没有被执行,没有生成 python 咬代码并且echo保持沉默。

我也尝试过使用该exec()命令,但没有成功。

4

6 回答 6

10

我认为这可能会有所帮助...

看起来 python 调用的输出需要正确路由。我能够在我的 index.php 文件中完成这项工作以返回 python 版本......

shell_exec("python -V 2>&1");

是我找到答案的地方。

于 2013-10-06T19:10:54.063 回答
1

如果您尝试使用以下代码运行 python 脚本

$output = shell_exec("python my_script.py");

您将需要为 my_script.py 使用绝对路径并为 python 文件提供所有权限(我不确定哪些足够)。

于 2014-07-02T06:49:16.123 回答
1

我认为你需要参考你的 python 的完整路径。

例如改用这个:

$output = shell_exec("/usr/bin/python full_path/my_script.py")

代替:

$output = shell_exec("python my_script.py");
于 2017-03-06T19:10:20.733 回答
0

我认为内核无法找到安装它的 python 的路径..如果你可以执行 echo $PATH ..如果给定添加你的 python 部分,它将显示搜索命令的所有路径,然后它可能会工作或者你可以给出绝对路径(除了/usr/bin/)看看它是否有效..我也需要测试它。

于 2013-09-10T14:07:56.200 回答
0

做什么

which python

告诉你,无论是从命令行还是从 shell_exec()?它应该告诉你它(从)找到了哪个(如果有的话)Python 解释器$PATH。不要忘记,$PATHLinux 命令行中使用的很可能与$PATHshell_exec() 使用的不同!一旦找到要使用的 Python 解释器,您可能必须在 shell_exec() 中对其进行硬编码。

于 2013-09-10T16:52:35.060 回答
0

Web 服务器很可能没有适当的权限来执行 shell 命令。要解决此问题,请运行“sudo visudo”命令并将以下行添加到 sudoers 文件中:

www-数据 ALL=NOPASSWD: ALL

另外,确保 /var/www 目录属于 www-data 用户和组(使用 sudo chown -R www-data:www-data /var/www 设置正确的所有者)。详细信息在这里http://www.raspberry-pi-geek.com/Archive/2014/07/PHP-on-Raspberry-Pi

另请参阅 Can't execute python script from php

于 2016-01-24T09:52:38.397 回答