无法通过PHP调用python脚本

无法通过PHP调用python脚本,php,python,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 ti

我已经被困了好几天了。我试图从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;
?>
我只是不明白为什么循环会运行,但我没有得到原始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时,我会看到一个空白屏幕。我不知道这会导致脚本失败的原因。

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

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

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

which python
//usr/bin/python
用户可以使用该值:

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

注意:

  • 确保apache
    user
    onoff.py
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脚本为什么不能工作

pi@raspberrypi:~$which python/usr/bin/python什么是
onoff.py
?我用以下代码替换了我的原始代码:$command=escapeshellcmd('/usr/bin/python/var/www/html/onoff.py');仍然不行:(权限:-rwxr-xr-x 1 root root 221 May 15 23:35 onoff.py输出什么?
$command=escapeshellcmd('python/var/www/html/onoff.py');echo$command;
强制另请参见:好,所以我在加载php页面时对输出进行了更改:int(1)array(0){}hmm抱歉地说“它适合我”(请注意,我将其直接剥离并删除了escapeshellarg(),因为它是打开的;如果您将用户输入插入CLI命令中,则会使用它)#>php-a$cmd='/usr/bin/python/path/to/test.py';$code=0;$res=[];exec($cmd,$res,$code);var\u dump($code,$res);die;
$command = escapeshellcmd('/usr/bin/python /var/www/html/onoff.py');
$command = escapeshellcmd('/path/to/python /var/www/html/onoff.py');
$response = array();
$code = 0;
exec($command, $response, $code);
var_dump($code, $response);
die;