无法运行python从PHP

时间:2015-03-27 11:53:49

标签: php python linux shell

我想运行一些python脚本(我知道风险,但我必须完成它)

我尝试使用:

echo exec('python --version ');

以及 echo shell_exec('python --version ');

还试过'/usr/bin/python '而不是python 但我根本得不到任何输出。 我甚至已将www-data添加到sudoers列表中,仍然无法正常工作。

我该怎么办?

运行debian和python 2.7

4 个答案:

答案 0 :(得分:4)

似乎python --version由于某种原因将版本信息打印到stderr而不是stdout,所以你需要将前者重定向到后者:

exec('python --version 2>&1');

另请注意,exec的返回值只是执行命令输出的最后一行。如果要从返回多行的命令中捕获完整输出,则需要提供一个数组作为exec's第二个参数:

$output = array();
exec($some_command, $output);

答案 1 :(得分:2)

要捕获python --version的输出,请使用以下内容:

exec('python --version 2>&1', $output);
var_dump($output);

python --version输出到stderr,这是bug。它已在Python 3.4.0中修复(参见changelog, issue #18338)。

答案 2 :(得分:1)

你无法从PHP运行python脚本的原因是,系统调用需要是root.Even,如果你进行sudo调用,它需要密码。所以你可以做的是将这一行添加到结尾文件:/ etc / sudoers

www-data ALL =(ALL)NOPASSWD:ALL

这样,来自PHP的任何sudo调用都不需要密码。 继续执行python脚本,例如。 exec("sudo python /home/pi/test.py"); 这对我有用。让我知道它是否有效。

答案 3 :(得分:0)

在命令行上键入python时,您的Shell将搜索在环境变量$PATH中配置的所有文件夹。您的PHP-Interpreter具有不同的环境,因此可能找不到python - 二进制。

尝试通过在您的Shell中运行python来获取which python二进制文件的完整路径,并尝试在PHP中使用它。