Partage
  • Partager sur Facebook
  • Partager sur Twitter

script python raspberry à distance

    28 novembre 2020 à 18:57:41

    Holà, après plusieurs jours de recherche je n'arrive pas à trouver un moyen d'executer un script python sur un raspberry pi à distance.

    Je vous explique, mon scripte à pour but de gérer une bande led WS281, et j'aimerais pouvoir executer le script depuis un téléphone par exemple.

    J'ai essayé notamment avec un script php et le code simple comme bonjour :  

    <?php
     shell_exec('python /home/pi/rpi_ws281x/python/examples/ledstest.py');
    echo "php ok";
    ?>

    Qui ne donne absolument rien a pars le message "php ok" pour vérifier que la page fonctionne.

    Je me tourne donc vers vous afin d'espérer trouver une réponse.

    -
    Edité par EmilioMrt 28 novembre 2020 à 19:04:00

    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2020 à 19:41:37

      Ton script est en python 2 ou 3 ?

      Si c'est du Python 3 il faut utiliser l'exécutable python3.

      Parfois les variables d'environnement n'existent pas quand on utilise exec, donc il faut utiliser le chemin complet de l'exécutable python (ce sera un truc comme /usr/bin/python3).

      Après le truc le plus évident c'est d'essayer la commande lancée par shell_exec dans les mêmes conditions (c'est à dire depuis l'utilisateur de ton serveur web) pour voir le message d'erreur.

      Par exemple si ton serveur web tourne avec l'utilisateur www-data, tu peux lancer ta commande sous le même utilisateur avec sudo -u www-data python /chemin/vers/fichier.py

      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        28 novembre 2020 à 20:41:36

        Merci beaucoup pour ta réponse !

        Et oui le fichier se lance pourtant correctement quand je l'active depuis le terminal, et j'ai essayé d'utiliser l'exécutable python 3, mais rien n'y fait...

        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2020 à 21:02:46

          Je connais pas trop PHP mais je suppose qu'il doit y avoir moyen de récupérer le résultat de la commande lancée par shell_exec, l'idéal serait de l'afficher directement sur la page web pour voir l'erreur.

          EDIT : Je viens de regarder la doc php, il faut utilise exec au lieu de shell_exec pour récupérer la valeur de retour de la commande : https://www.php.net/manual/fr/function.exec.php

          -
          Edité par LoupSolitaire 28 novembre 2020 à 21:05:16

          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

            28 novembre 2020 à 22:26:21

            Alors, j'ai réorganiser les fichiers pour y voir plus clair et enlever les potentiels problèmes de chemin,

            j'ai aussi mis toutes les autorisations possibles pour le fichier php et le script python (au cas ou),

            et enfin j'ai essayé de mettre en place ce code : 

            <?php 
            echo ('Test');
            $output = exec("sudo python3 ledstest.py");
            echo $output;
            
            ?>

            Hélas, toujours rien au bataillon, aucun retours du script ni quoi que ce soit...

            • Partager sur Facebook
            • Partager sur Twitter
              29 novembre 2020 à 14:28:38

              Remplacez l'exécution du script Python par l'exécution d'une commande système comme ls.

              Si vous obtenez le même résultat, ce sera du côté de la mise en œuvre de l'exec de PHP qu'il faudra regarder.

              • Partager sur Facebook
              • Partager sur Twitter
                29 novembre 2020 à 14:43:45

                Il faut passer un argument à exec pour récupérer l'output complet, la valeur de retour de la fonction c'est juste la dernière ligne de l'output de la commande.

                Regarde la doc, je t'ai mis le lien.

                EDIT : Et utilise le chemin absolu vers le fichier python.

                -
                Edité par LoupSolitaire 29 novembre 2020 à 14:45:22

                • Partager sur Facebook
                • Partager sur Twitter

                Blond, bouclé, toujours le sourire aux lèvres...

                  29 novembre 2020 à 15:05:22

                  Du coup j'ai essayé avec une commande du type "ls -l " qui me donne effectivement le bon retours donc le problème n'est pas du côté du php, il me semble que j'ai trouvé l'erreur, j'executer le script avec la commande "sudo" car il me faut les droit nécessaires à l'accès des libs, or php à l'air de ne pas le prendre en compte car avec un petit script type " print("hello world"), le retour marche correctement avec  la commande 

                  <?php 
                  echo ('Php ok');
                  $output = exec("python hello.py");
                  echo $output;
                  
                  ?> 

                   Ah et du coup j'ai aussi essayé en indiquant le chemin vers python, rien y fait.

                  Il me semble que mon script essaie d'accéder au chemin suivant /dev/mem

                  n'ayant pas la permission sans sudo je ne sais pas comment faire ...

                  -
                  Edité par EmilioMrt 29 novembre 2020 à 15:20:30

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 novembre 2020 à 17:35:34

                    EmilioMrt a écrit:

                    Il me semble que mon script essaie d'accéder au chemin suivant /dev/mem

                    n'ayant pas la permission sans sudo je ne sais pas comment faire ...

                    C'est de la cuisine Linux que j'ignore mais qui pose des problèmes de sécurité qu'on résout en faisant communiquer le serveur Web sans privilèges avec un serveur local privilégié.

                    Après on peut éviter le problème si on peut récupérer l'information souhaitée sans accéder à /dev/mem...

                    Ce qui pourrait être le sujet d'une autre discussion ou vous présentez ce que fait le script



                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 novembre 2020 à 20:49:22

                      Comment récupérer ces infos sans privilèges est quelque chose qui est peut être documenté dans la bibliothèque rpi que vous utilisez....

                      Mais je ne vais pas chercher pour vous (de toutes façons, sans équipement on ne peut pas tester les solutions proposées).

                      ET s'il n'y a pas de solutions de ce côté là, c'est une question de privilèges et de sécurité: rien à voir avec la programmation Python (il y a un forum linux qui peut peut être aider).

                      -
                      Edité par mps 29 novembre 2020 à 20:50:17

                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 novembre 2020 à 20:58:25

                        Non mais j'ai un peu l'impression que c'est sans issus

                        j'ai jeté un oeil à ce forum :

                        https://raspberrypi.stackexchange.com/questions/40105/access-gpio-pins-without-root-no-access-to-dev-mem-try-running-as-root

                        il indique que je devrais autoriser l'accès à /dev/mem

                        ce qui est en soit une très mauvaise idée 

                        mais j'ai tout de même essayé disons, et .... toujours rien il refuse de me l'ouvrir ...

                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 novembre 2020 à 1:59:41

                          EmilioMrt a écrit:

                          mais j'ai tout de même essayé disons, et .... toujours rien il refuse de me l'ouvrir ...

                          Le message d'erreur est le même ou c'est un autre ?

                          Soit c'est le même message d'erreur et ça veut dire que l'autorisation d'accès n'a pas fonctionné, soit c'est un autre message d'erreur et il faut le résoudre aussi jusqu'à ce qu'il n'y ait plus de bugs.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Blond, bouclé, toujours le sourire aux lèvres...

                            30 novembre 2020 à 19:08:13

                            C'est le même, mais j'ai un peu l'impression qu'il ne veux pas prendre en compte l'autorisation 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 novembre 2020 à 21:19:31

                              Ben, vaut voir la commande que tu as utilisé, tu peux vérifier les droits avec 'ls -lh' sur le fichier auquel tu veux accéder.

                              Il faut aussi que le programme ait le droit de traverser le dossier parent, mais je pense que ça doit être déjà le cas par défaut.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Blond, bouclé, toujours le sourire aux lèvres...

                                1 décembre 2020 à 8:07:02

                                Pourquoi avec du php ? :o

                                Tu peux lancer la commande via ssh

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 décembre 2020 à 12:56:28

                                  Oui justement actuellement j'active la commande via ssh. Mais comme le dispositif à pour objectif un usage simple, il me faut une interface homme-machine.

                                  Je vais essayer de voir quels droits sont accordés au fichier.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 décembre 2020 à 17:42:45

                                    Regarde le module fabric, ça permet de créer rapidement un outil simple en cli pour lancer des commandes ssh

                                    -
                                    Edité par thelinekioubeur 5 décembre 2020 à 17:43:30

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    script python raspberry à distance

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown