Не могу выполнить скрипт Python из документа PHP

Я запускаю документ PHP на сервере Apache на моем Raspberry Pi и хочу, чтобы он запускал файл при нажатии кнопки. Я поместил некоторые команды echo в команду, чтобы файл запустился, и он распечатывается, но файл не запускается. Файл index.php и файлы lightson.py и lightsoff.py находятся в одном каталоге (/ Вар / WWW) и я добавил #! / usr / bin / env python к началу обоих файлов и сделал их исполняемыми с помощью chmod + x lightson.py. Если я запускаю команду из оболочки, она работает и включает свет точно так же, как я хочу, с помощью точно такой же команды, как в файле, но она не будет проходить через команду. Код:

<html>
<head>
<title>Light Controller</title>
</head>


<?php
if (isset($_POST['LightON']))
{
shell_exec("sudo python /var/www/lightson.py");
echo("on");
}
if (isset($_POST['LightOFF']))
{
shell_exec("sudo python /var/www/lightsoff.py");
echo("Off");
}
?>

<form method="post">
<button name="LightON">Light ON</button>&nbsp;
<button name="LightOFF">Light OFF</button><br><br>
</form>


</html>

3

Решение

как вы сказали, вы запускаете его как apache->php->shell_exec(SUDO..)

Таким образом, пользователь apache должен находиться в файле sudoers, лучше не давать sudo apache, а дать пользователю apache (www-data) право на запуск вашей программы на python

поместите первую строку в вашем скрипте Python: #!/usr/bin/env python поэтому скрипт знает, с какой программой его открыть ..

затем

изменить группу:

chgrp www-data /path/to/python-script.py

сделать это исполняемым

chmod +x /path/to/python-script.py

попытайся

shell_exec("/path/to/python-script.py");

Надеюсь это работает 😉

TIPP: Apache и PHP предназначены для доставки Documents and Strings, если вы хотите какой-то контроль и API начать с nodejs и https://www.npmjs.com/package/rpi-gpio пакет. Таким образом, у вас будет одно место для вашей надежной среды автоматизации

2

Другие решения

Это сработало для меня:

test.php

<?php
echo shell_exec("python test.py");
?>

test.py

f = open("test.txt", "a+")
f.write("hiya buddy!!\n")
f.close()
print "some output"

Вот мой актуальный ls -l вывод из /var/www/html:

jason@Jason-one /var/www/html $ ls -l
-rw-r--r--  1 jason    jason    44 Sep 20 18:12 test.php
-rwxr-xr-x  1 jason    jason    82 Sep 20 17:44 test.py
-rw-rw-rw-  1 jason    jason    38 Sep 20 18:15 test.txt

Поскольку на моем ноутбуке нет контактов GPIO, я решил записать файл в качестве теста. Обратите внимание, я не должен был использовать sudo из-за того, как я установил права на test.py,

1

По вопросам рекламы [email protected]