无法通过PHP调用python脚本


Unable to call a python script through PHP

我已经被困了几天了。我正在尝试从PHP调用一个简单的python脚本。就我而言,我无法弄清楚问题出在哪里。我已经用chmod+x使onoff.py脚本可执行。

我可以从命令行运行脚本,如下所示:

pi@raspberrypi:/var/www/html $ python onoff.py
LED on
LED off

我的问题是当我尝试从PHP调用脚本时。我一无所获。

我的Python脚本:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18,GPIO.OUT)
print "LED on"
GPIO.output(18,GPIO.HIGH)
time.sleep(1)
print "LED off"
GPIO.output(18,GPIO.LOW)

我的PHP脚本:

<?php 
$command = escapeshellcmd('python /var/www/html/onoff.py');
$output = shell_exec($command);
echo $output;
?>

非常感谢您的帮助!

编辑:

如果我将onoff.py脚本更改为一个简单的while循环,例如:

#!/usr/bin/python
x=1
while (x<10):
   print x
   x=x+1

浏览器上的输出为:

 1 2 3 4 5 6 7 8 9

我只是不明白为什么循环会运行,但我没有得到原始python代码的输出。

编辑2:

好的,所以我采取了一种不同的方法,试图看看代码在哪里失败。我一次添加一些代码。请参阅以下内容。

#!/usr/bin/python
import random
import time
import RPi.GPIO as GPIO
randomNumber = random.randint(1, 20)
GPIO.setmode(GPIO.BCM)
#GPIO.setup(18,GPIO.OUT)
print randomNumber

现在,当我运行PHP时,它会显示一个随机数,这样我就知道python脚本正在运行。当我取消注释GPIO.setup(18,GPIO.OUT)并运行php时,我会得到一个空白屏幕。我不知道为什么这会使脚本失败。

shell_exec()仅在$command a)时返回字符串。运行正常并假设b)。它吐出了对STDOUT的反应。

使用exec()并将您的命令、一个整数$code和一个空数组$response传递给它,这两个数组都被PHP视为引用参数。

这样运行您的命令:

$command = escapeshellcmd('/path/to/python /var/www/html/onoff.py');
$response = array();
$code = 0;
exec($command, $response, $code);
var_dump($code, $response);
die;

现在,您应该了解PHP内部提供的实际上是什么,以及Python脚本不起作用的原因。

您需要在脚本之前使用python,即:

$command = escapeshellcmd('python /var/www/html/onoff.py');

如果它不起作用,python可能不在apache用户的PATH上,您可能需要使用python二进制文件的完整路径,使用which查找完整路径:

which python
//usr/bin/python

使用该值:

$command = escapeshellcmd('/usr/bin/python /var/www/html/onoff.py');

注意:

  • 确保apache useronoff.py具有执行权限