我已经被困了几天了。我试图从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时,我得到一个空白屏幕。我不知道为什么会让脚本失败。
答案 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');
注意:强>
user
具有onoff.py