Exécution de scripts Python via boutons page HTML
Modérateur : Francois
Exécution de scripts Python via boutons page HTML
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.
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.
-
- Administrateur
- Messages : 3230
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: Exécution de scripts Python via boutons page HTML
Bonjour,
Dans ton script PHP, je pense qu'il te manque le chemin d'accès à python, ta commande : ne suffit pas.
Pour savoir où il se trouve, s'il est connu dans le path, tu peux exécuter la commande
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");
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
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
-
- Raspinaute
- Messages : 969
- Enregistré le : dim. 28 déc. 2014 15:28
- Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe
Re: Exécution de scripts Python via boutons page HTML
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.
Et si ce qu'a dit Domi ne suffit pas, peut-être changer les droits de ces fichiers en www-dada il me semble.
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
Re: Exécution de scripts Python via boutons page HTML
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.
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
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 ...
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
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.
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.
-
- Raspinaute
- Messages : 969
- Enregistré le : dim. 28 déc. 2014 15:28
- Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe
Re: Exécution de scripts Python via boutons page HTML
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
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
Modifié en dernier par dyox le mar. 1 juin 2021 17:46, modifié 1 fois.
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
-
- Raspinaute
- Messages : 1585
- Enregistré le : dim. 10 mai 2015 18:44
- Localisation : Dans la campagne à côté d'Annecy
- Contact :
Re: Exécution de scripts Python via boutons page HTML
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,
A+
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 ) 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).
A+
- BananaPI : Gentoo, disque SATA de 2 To
- Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
- Multimedia par DNLA
- Et pleins d'idées ... et bien sûr, pas assez de temps.