Выполнить Python script из Php

У меня есть PHP-страница на моем малиновом пие с двумя кнопками (вкл./выкл.) Кнопка "Вкл." Перенаправляет на On.php Кнопка выключения перенаправляется на Off.php В "/usr/lib/cgi-bin" у меня есть python script, который я хотел бы выполнить (script.py) Я могу отлично выполнить его с терминала, набрав

cd /usr/lib/cgi-bin
sudo python script.py

Он работает, если я делаю это с терминала.

Проблема заключается в файле PHP (On.php) в папке "/var/www". Вот что я написал:

<?php
exec('cd /usr/lib/cgi-bin');
exec('sudo python script.py');
?>

Почему выполняется script с терминала, но не с моего PHP?

Ответ 1

Вы не можете использовать sudo из PHP script. Apache работает от пользователя (общее описание www-data), поэтому отредактируйте этот файл: /etc/sudoers

Затем добавьте эту строку:

www-data ALL=(ALL) NOPASSWD:ALL

Уход! это разрешит все функции, которые вызывается PHP script, вы можете адаптировать изменение "ALL" с помощью команды script или Python.

Затем уточните своего пользователя в команде exec:

<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/script.py')

Ответ 2

Попробуйте это, он должен работать:

<?php 
system("cd /usr/lib/cgi-bin");
system("sudo python script.py");
?>

Или даже это:

<?php 
system("cd /usr/lib/cgi-bin && sudo python script.py");
?>

Ответ 3

В более раннем дистрибутиве Raspbian вам нужно поместить файл в /var/www/file.py. Поэтому в файле file.php вы добавляете:

{
    exec("sudo python /var/www/file.py");
}

В новом Raspbian Jessie вам нужно поместить файл в /var/www/html/file.py, поэтому в файле file.php вам нужно добавить:

{
    exec("sudo python /var/www/html/file.py");
}

Или просто файл file.py

<?php
{
  exec("sudo python test.py");
}

? >

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

sudo nano /etc/sudoers

затем перейдите в нижнюю часть и добавьте это

pi ALL=(ALL) NOPASSWD: ALL<br>
www-data ALL=(ALL) NOPASSWD: ALL