无法通过PHP调用python脚本

时间:2016-05-16 00:06:18

标签: php python

我已经被困了几天了。我试图从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时,我得到一个空白屏幕。我不知道为什么会让脚本失败。

2 个答案:

答案 0 :(得分:1)

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脚本无法正常工作的原因。

答案 1 :(得分:0)

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

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

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

which python
//usr/bin/python

使用该值:

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

注意:

  • 确保apache user具有onoff.py
  • 的执行权限