无法从PHP运行python

我想运行几个Python脚本(我知道风险,但我必须完成)

我试过使用:

echo exec('python --version '); 

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

还尝试了'/usr/bin/python '而不是只是python,但我没有得到任何输出。 我甚至已经将www-data添加到sudoers列表中,但仍然无法工作。

我该怎么办 ?

运行debian和python 2.7

看来python --version出于某种原因将版本信息打印到stderr而不是stdout,因此您需要将前者重定向到后者:

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

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

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

要捕获python --version的输出python --version使用以下命令:

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

python --version输出到stderr,这是一个错误 。 它已经在Python 3.4.0中修复(请参阅changelog,issue#18338 )。

你不能从PHP运行python脚本的原因是,系统调用需要root。即使你做了一个sudo调用,它需要密码。所以你可以做的是把这一行添加到文件的末尾:/等/ sudoers文件

www-data ALL =(ALL)NOPASSWD:ALL

这样,任何来自PHP的sudo调用都不需要密码。 继续执行一个例如python脚本。 exec("sudo python /home/pi/test.py"); 这适用于我。让我知道如果它的作品。

当您在命令行上键入python时,Shell正在搜索环境变量$PATH中配置的所有文件夹。 你的PHP解释器有一个不同的环境,因此可能不会找到python二进制。

尝试通过运行shell which python来获得python -Binary的完整路径,并尝试在PHP中使用它。