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

时间:2013-09-10 14:03:57

标签: php python

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

如果我输入:

$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 bitecode且echo保持静默。

我还尝试使用exec()命令,但没有取得更多成功。

6 个答案:

答案 0 :(得分:6)

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

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

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

Here是我找到答案的地方。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

什么是

which python

告诉你,从命令行和shell_exec()?它应该告诉你它找到了哪个(如果有的话)Python解释器(来自$PATH)。不要忘记,Linux命令行中使用的$PATH可能与shell_exec()使用的$PATH不一样!一旦找到想要使用的Python解释器,可能必须在shell_exec()中对其进行硬编码。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

Web服务器很可能没有适当的权限来执行shell命令。要解决这个问题,请运行&#39; sudo visudo&#39;命令并将以下行添加到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

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

答案 5 :(得分:0)

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

例如,

使用此代码:

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

而不是:

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