使用 shell_exec() 在 php 脚本中执行 python


Execute python in a php script using shell_exec()

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

如果我输入:

$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() 命令,但没有更多成功。

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

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

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

这是我找到答案的地方。

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

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

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

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

例如,请改用以下内容:

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

而不是:

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

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

有什么作用

which python

告诉你,无论是从命令行还是从shell_exec()?它应该告诉你它正在找到哪个(如果有的话)Python解释器(来自$PATH)。不要忘记,从 Linux 命令行使用的$PATH很可能与 shell_exec() 使用的$PATH不同!找到要使用的 Python 解释器后,可能需要在 shell_exec() 中对其进行硬编码。

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

www-data 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

另请参阅无法从 php 执行 python 脚本