Page 1 sur 1

Exécution de scripts Python via boutons page HTML

Posté : lun. 31 mai 2021 16:43
par Sodateru
Bonjour,

Je suis nouveau sur le forum, et je suis également débutant en HTML et PhP.
J'ai souvent lu sur ce forum mais je n'ai jamais rien demandé. Je sais donc que mon problème est un problème déjà existant puisqu'il y a déjà eu des articles sur ce sujet.
Après avoir étudié ces derniers je reste malgré tout bloqué, c'est pourquoi je viens vous demander de l'aide aujourd'hui.

Je travaille sur une porte de poulailler automatique avec ma Raspberry et j'utilise 2 scripts Python, un pour l'ouverture et un pour la fermeture.
J'ai fait une page HTML pour gérer cela avec 2 boutons (1 pour chaque action), cependant les scripts ne s'exécutent pas lorsque je clique sur les boutons.

J'ai essayé de simplement demandé de mettre à l'état haut des sorties de ma Raspberry (pour voir si le problème venait de mon programme Php ou bien de l'exécution des scripts), et dans ce cas cela fonctionne.

J'ai 3 fichiers pour gérer ma page HTML, 1 HTML (index.php), 1 JS (script.php) et 1 CSS (stylesheet.css).

Voici mon programme HTML :

<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Porte poulailler</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>
<body>
<form action="script.php" method="post">
<input type="submit" name="ouvrir" value="Ouverture" class="button" id="Ouverture">
<br/>
<input type="submit" name="fermer" value="Fermeture" class="button" id="Fermeture">
</form>
</body>
</html>

puis mon programme PhP:

<?php
if($_POST['ouvrir'] == 'Ouverture')
{
system("python /home/pi/ouverture.py");
}
if($_POST['fermer'] == 'Fermeture')
{
system("python /home/pi/fermeture.py");
}
header('Location: index.php');
?>

Comme je l'ai précisé au début je suis débutant, je conçois alors que mes propos puissent ne pas être très clairs. J'espère néanmoins que quelqu'un pourra m'apporter un début de réponse.
Je vous remercie par avance.

Re: Exécution de scripts Python via boutons page HTML

Posté : lun. 31 mai 2021 18:24
par domi
Bonjour,

Dans ton script PHP, je pense qu'il te manque le chemin d'accès à python, ta commande :

Code : Tout sélectionner

system("python /home/pi/ouverture.py");
ne suffit pas.

Pour savoir où il se trouve, s'il est connu dans le path, tu peux exécuter la commande

Code : Tout sélectionner

whereis python

Re: Exécution de scripts Python via boutons page HTML

Posté : lun. 31 mai 2021 21:50
par dyox
Bonsoir,

Et si ce qu'a dit Domi ne suffit pas, peut-être changer les droits de ces fichiers en www-dada il me semble.

Re: Exécution de scripts Python via boutons page HTML

Posté : mar. 1 juin 2021 09:04
par Sodateru
Bonjour à vous,

Tout d'abord, je souhaite vous remercier pour vos réponses.

-domi, j'ai en effet essayé la commande avec le chemin d'accès à Python, cela me donne alors :

system("sudo /usr/bin/python3 /home/pi/ouverture.py")

mais cela ne fonctionne toujours pas (peut-être l'ai-je mal écrit ?).

-dyox, comment dois-je faire pour changer les droits de mes fichiers ?

Je vais chercher de mon côté en attendant vos réponses. Merci à vous.

Re: Exécution de scripts Python via boutons page HTML

Posté : mar. 1 juin 2021 09:31
par dyox

Re: Exécution de scripts Python via boutons page HTML

Posté : mar. 1 juin 2021 11:03
par domos
Bonjour,

tu ne peux pas utiliser sudo, car l'utilisateur qui va exécuter ton script est "www-data" et il n'a pas et ne dois pas avoir de droits sudo.

De plus cette utilisateur "www-data", si il a bien accès au répertoire /home/pi, doit pouvoir lire tes scripts (droits 666).
chmod 666 /home/pi/ouverture.py ...

Re: Exécution de scripts Python via boutons page HTML

Posté : mar. 1 juin 2021 11:56
par Sodateru
Bonjour,

Que dois-je mettre à la place de sudo pour que "www-data" exécute mon script alors ?

Par rapport aux droits de lecture et d'écriture par tout le monde (666), j'avais personnellement donné tous les droits à mon fichier ouverture.py (777). Mais justement en faisant cela, je devrais pouvoir exécuter mon script même en utilisant l'utilisateur "www-data", non ? (or mon programme ne s'exécute toujours pas)

J'ai aussi essayé de mettre "sudo su" à la place de "sudo" (ce qui exécute la commande sous l'utilisateur "root" à la place de l'utilisateur "pi" il me semble ?) mais rien de plus (sachant que mon script.php est sous l'utilisateur "root" et que mes scripts python sont sous l'utilisateur "pi").

Merci.

Re: Exécution de scripts Python via boutons page HTML

Posté : mar. 1 juin 2021 12:36
par dyox
Qu'est-ce qui justifie l'utilisation de sudo pour le script.py ?

Comme dit précédemment, si cela ne fonctionne pas, mettre tous les fichiers du web sous www-data.
Pour plus de facilité, il a aussi visudo pour tester si c'est vraiment un problème de droits.

Rien dans les journaux comme erreurs ? (voir ma signature)

Il y a ce tuto qui peut être sympa : viewtopic.php?f=44&t=3033

Re: Exécution de scripts Python via boutons page HTML

Posté : mar. 1 juin 2021 17:01
par destroyedlolo
Bonjour,

En complément de ce qui a été dit (chemin vers python, droit d'accès, ...), je rajouterai qu'il faut aussi que tu t'assures que le sudo fonctionne sans demander de mdp : pourquoi, parce comme le dit sudo sera lancé par l'intermédiaire de la page HTML, il n'aura jamais de réponse s'il doit demander le mdp.

Ensuite, pour débugger,
  • il est possible (conditionnel :mrgreen: ) que tu trouves plus d'info dans les logs d'Apache. En particulier dans ErrorLog
  • si tu n'y as pas les informations demandées, affiche le code source de la page de réponse dans ton navigateur : même si ce n'est pas forcement affiché dans le navigateur, tu y trouveras peut-être d'autres messages d'erreurs (il faudra décommenter temporairement le header() à la fin).
Enfin, si tes scripts python ne sont pas trop compliqués, ca vaudrait peut-être le coup de faire ce qu'ils font dans PHP lui-même. Par exemple s'ils ne font qu'envoyer des messages MQTT, ca se fait très bien en PHP. Idem sans doute s'ils "jouent" avec les GPIOs.

A+