Partage
  • Partager sur Facebook
  • Partager sur Twitter

php à python

    17 mai 2022 à 11:22:22

    Bonjour,

    J'essaye d'envoyer des infos de php à python mais malheureusement cela ne marche pas, je vous donne le code :

    php :

    <?php
    $data = 'bonjour';
    $output = shell_exec("py ./script.py" . $data . "'salut'"));
    echo $output;



    Python : 

    import sys
    result = sys.argv[2]
    print(result+" by python!")
    
    
    trueTab = "dans le fichier json"
    #Insere dans le fichier json 'data.json' le contenue de la variable trueTab
    with open('data.json', 'w') as mon_fichier:
    	json.dump(trueTab, mon_fichier)

    Pour info quand j'exécute le script rien ne se passe, le fichier json reste vide et rien ne se print et quand j'execute dans mon terminal manuellement "py ./script.py 'bonjour' 'salut'", le fichier json se remplit.

    Merci du temps que vous allez passer à m'aider



    -
    Edité par IteWaseMi 17 mai 2022 à 11:25:00

    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2022 à 11:52:33

      Bonjour,

      Je pense que tu devrais mettre le chemin complet (absolu ou également à partir de la racine) de ton script sur le serveur et non seulement le chemin relatif.

      Ta ligne de commande me semble erronée avec pas d'espace entre paramètres et une parenthèse fermante en trop.

      Par ailleurs, ton script est-il bien dans l'espace de ton serveur web avec les bons droits ?

      Last but not least, pourquoi vouloir déclencher du python à partir du php pour juste mettre à jour une info dans un fichier ? Php sait le faire pareillement et tu évites ainsi d'empiler les couches donc tu limites les conso mémoire, cpu, etc.

      A+

      -
      Edité par monkey3d 17 mai 2022 à 12:05:29

      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2022 à 11:55:06

        Bonjour,

        Peut être ne trouve t-il pas le fichier python.

        Peux-tu mettre le chemin absolu de ton fichier à la place?

        shell_exec('py /Users/ton_path/script.py');

        Que donne un var_dump de $output?

        • Partager sur Facebook
        • Partager sur Twitter
        "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
          17 mai 2022 à 11:58:12

          Euh, il n'y a pas une erreur de syntaxe, une ) de trop déjà sur le code PHP ?

          Il ne manque pas non plus des espaces entre les différents arguments du script python ?

          Utiliser exec à shell_exec histoire d'avoir plus d'infos ? Ajouter une redirection de stderr sur stdout pour récupérer les erreurs du script Python ?

          +1 pour le var_dump plutôt qu'un echo, ça permettrait de différencier NULL de ''

          -
          Edité par julp 17 mai 2022 à 12:00:10

          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2022 à 12:17:26

            julp a écrit:

            Euh, il n'y a pas une erreur de syntaxe, une ) de trop déjà sur le code PHP ?

            Il ne manque pas non plus des espaces entre les différents arguments du script python ?

            Utiliser exec à shell_exec histoire d'avoir plus d'infos ? Ajouter une redirection de stderr sur stdout pour récupérer les erreurs du script Python ?

            +1 pour le var_dump plutôt qu'un echo, ça permettrait de différencier NULL de ''

            -
            Edité par julp il y a moins de 30s

            Yes les erreurs sont seulement sur ce post, j'ai mal copié / coller x)

            Peux-tu m'en dire plus par rapport a la redirection stderr sur stdout ?

            Merci :)

             ---------------------------------------------------------------------------------------------------------------

            eclairia a écrit:

            Bonjour,

            Peut être ne trouve t-il pas le fichier python.

            Peux-tu mettre le chemin absolu de ton fichier à la place?

            shell_exec('py /Users/ton_path/script.py');

            Que donne un var_dump de $output?


            Yes j'ai remplacé mais toujorus rien :'(

            Le var_dump de $output donne 'null'

             ---------------------------------------------------------------------------------------------------------------

             monkey3d a écrit:

            Bonjour,

            Je pense que tu devrais mettre le chemin complet (absolu ou également à partir de la racine) de ton script sur le serveur et non seulement le chemin relatif.

            Ta ligne de commande me semble erronée avec pas d'espace entre paramètres et une parenthèse fermante en trop.

            Par ailleurs, ton script est-il bien dans l'espace de ton serveur web avec les bons droits ?

            Last but not least, pourquoi vouloir déclencher du python à partir du php pour juste mettre à jour une info dans un fichier ? Php sait le faire pareillement et tu évites ainsi d'empiler les couches donc tu limites les conso mémoire, cpu, etc.

            A+

            -
            Edité par monkey3d il y a 12 minutes


            J'ai fais mon code comme ça car je ne vous montre pas tout (le reste est en commentaire actuellement) mais en gros mon script python est indispensable.

            De plus j'ai mis tous mes fichiers dans le dossier de wamp

            ---------------------------------------------------------------------------------------------------------------

            Je vous redonne le code actualisé :

            PHP 

            $data = 'bonjour';
            $output = shell_exec("py C:/Users/antoi/AppData/Local/Programs/Python/Python310/script.py " . $data);
            //$output = shell_exec("py F:/wamp/www/exeStage/script.py " . $data); ne marche que manuellement aussi
            var_dump ($output);



            PYTHON :

            result = sys.argv[1]
            with open('data.json', 'w') as mon_fichier:
            	json.dump(result, mon_fichier)




            -
            Edité par IteWaseMi 17 mai 2022 à 13:00:15

            • Partager sur Facebook
            • Partager sur Twitter
              17 mai 2022 à 13:28:13

              De ce que je vois du chemin complet, je pense que le programme que tu veux lancer n'est pas dans l'espace du serveur web : peux tu vérifier ?

              Script python indispensable : pour avoir fait pas mal de dév, j'ai rarement vu un traitement fait avec python qu'il ne soit pas possible de réaliser en php.

              Sur le plan architecture logicielle, c'est un peu rude pour ne pas dire plus  car outre les aspects ressources dont j'ai parlé ci-dessus, il te faut passer des paramètres de php à python et éventuellement retourner des infos de python vers php en contrôlant que le process se déroule bien ... bref une gymnastique qui ne conduit pas à un développement robuste, évolutif et maintenable. 

              A+

              -
              Edité par monkey3d 17 mai 2022 à 13:37:29

              • Partager sur Facebook
              • Partager sur Twitter
                17 mai 2022 à 13:40:34

                monkey3d a écrit:

                De ce que je vois du chemin complet, je pense que le programme que tu veux lancer n'est pas dans l'espace du serveur web : peux tu vérifier ?

                Script python indispensable : pour avoir fait pas mal de dév, j'ai rarement vu un traitement fait avec python qu'il ne soit pas possible de réaliser en php.

                Sur le plan architecture logicielle, c'est un peu rude pour ne pas dire plus  car outre les aspects ressources dont j'ai parlé ci-dessus, il te faut passer des paramètres de php à python et éventuellement retourner des infos de python vers php en contrôlant le process.

                A+

                Mon server web se trouve dans le dossier www de mon dossier wamp. Donc si mes fichiers sont au bon endroit 

                Pour l'architecture je n'ai jamais voulu cacher quoi que se soit : tous ce que je vous ai montré en code représente l'intégralité de mon code actuellement, j'ai mis le reste en commentaire.

                • Partager sur Facebook
                • Partager sur Twitter
                  17 mai 2022 à 13:46:54

                  Ton script python n'est pas sous www selon le dernier code que tu fournis : 

                  C:/Users/antoi/AppData/Local/Programs/Python/Python310/script.py

                  Pour l'architecture logicielle, tu fais comme tu veux bien-sûr : je t'ai juste donné mon point de vue argumenté et qui est aussi basé sur un peu pas mal ... d'expérience. Si tu as envie d'empiler les couches et les problèmes de communication entre 2 filières de dév, c'est ton choix.

                  A+

                  -
                  Edité par monkey3d 17 mai 2022 à 13:47:57

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 mai 2022 à 13:53:23

                    J'ai mis mon fichier dans deux endroits :

                    le premier endroit est la ou mes fichiers pythons s'enregistre automatiquement :

                    C:/Users/antoi/AppData/Local/Programs/Python/Python310/script.py

                    Et l'autre endroit est la ou se trouve mon serveur local :

                    F:/wamp/www/exeStage/script.py

                    Si tu veux je peux te donner l'intégralité de mon code mais je ne pense pas que cela va nous avancer :

                    PHP :

                    <?php
                    // if (isset($_GET['filmUN'])){
                    //     $data = $_GET['filmUN']; 
                    // }
                    // if (isset($_GET['filmDEUX'])){
                    //     $data = $data . "," . $_GET['filmDEUX']; 
                    // } else {
                    //     $data =  $data . ",0";
                    // }
                    // if (isset($_GET['filmTROIS'])){
                    //     $data =  $data . "," . $_GET['filmTROIS']; 
                    // }else {
                    //     $data =  $data . ",0";
                    // }
                    // if (isset($_GET['filmQUATRE'])){
                    //     $data =  $data . "," . $_GET['filmQUATRE']; 
                    // }else {
                    //     $data =  $data . ",0";
                    // }
                    // if (isset($_GET['filmCINQ'])){
                    //     $data =  $data . "," . $_GET['filmCINQ']; 
                    // }else {
                    //     $data =  $data . ",0";
                    // }
                    
                    
                    $data = 'bonjour'; // je redéfini data pour le test php to python
                    $output = shell_exec("py C:/Users/antoi/AppData/Local/Programs/Python/Python310/script.py " . $data);
                    //$output = shell_exec("py F:/wamp/www/exeStage/script.py " . $data); ne marche que manuellement aussi
                    var_dump ($output);
                    
                    // header('Location: resultat.php');
                    ?>

                    et le python :

                    from pandas import array
                    from pytrends.request import TrendReq
                    import json 
                    import numpy as np
                    import sys
                    import logging
                    # Only need to run this once, the rest of requests will use the same session.
                    
                    # pytrend = TrendReq()
                    # nameMovie = result.split(',')
                    # print (nameMovie)
                    # nameMovie = ["batman", "spiderman"]
                    
                    
                    
                    # le code que je vous ai déjà donné et le reste est commenté 
                    
                    result = sys.argv[1]
                    with open('F:/wamp/www/exeStage/data.json', 'w') as mon_fichier:
                        json.dump(result, mon_fichier)
                    
                    # # Create payload and capture API tokens. Only needed for interest_over_time(), interest_by_region() & related_queries()
                    # # nameMovie = ['batman', 'superman', 'joker', 'Dune', 'titanic']
                    # # pytrend.build_payload(kw_list=nameMovie)
                    
                    # pytrend.build_payload(nameMovie, cat=0, timeframe='now 7-d', geo='', gprop='')
                    
                    # # Interest Over Time
                    # print('\n\n\n Intérêt au fil du temps \n')
                    # tab = interest_over_time_df = pytrend.interest_over_time()
                    # print(interest_over_time_df.head())
                    # print('\n\n')
                    # newtab = tab.to_numpy()
                    # print(newtab)
                    # print('\n\n')
                    
                    # rows = 5
                    # columns = len(nameMovie)
                    # tabCompte = [0, 0, 0, 0, 0]
                    # x = 0
                    # y = 0
                    # for i in range(columns):
                    #     for j in range(rows):
                    #         tabCompte[y] = tabCompte[y] + newtab[j][i]
                    #         if x == rows:
                    #             print (tabCompte[y], " / ", rows)
                    #             tabCompte[y] = tabCompte[y] / rows
                    #             x = 0
                    #             y = y + 1
                    #             print ('on change')
                    #         # print(newtab[j][i])
                    #         x = x + 1
                    # tabCompte[4] = tabCompte[4] / rows
                            
                    # print(tabCompte)
                    
                    # trueTab = nameMovie + tabCompte
                    # # trueTab = "ohmamaciota"
                    # with open('data.json', 'w') as mon_fichier:
                    # 	json.dump(trueTab, mon_fichier)
                    



                    Tiens moi au courant si ça t'as aidé pour trouver ce qu'il n'allait pas !

                    -
                    Edité par IteWaseMi 17 mai 2022 à 13:59:40

                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 mai 2022 à 13:59:51

                      Quand tu mets le chemin du exec avec :

                      F:/wamp/www/exeStage/script.py

                      cela ne fonctionne pas non plus ?

                      Par ailleurs peux tu mettre le chemin complet de l'interpréteur python dans la commande et pas seulement py. Comme je ne travaille que sous Linux, je ne sais où est l'interpréteur sous windows.

                      Je n'insiste pas pour tout faire en php mais vu de moi c'est aisément faisable de faire en php ce qui est en commentaire en python.

                      A+

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mai 2022 à 14:23:16

                        monkey3d a écrit:

                        Quand tu mets le chemin du exec avec :

                        F:/wamp/www/exeStage/script.py

                        cela ne fonctionne pas non plus ?

                        Par ailleurs peux tu mettre le chemin complet de l'interpréteur python dans la commande et pas seulement py. Comme je ne travaille que sous Linux, je ne sais où est l'interpréteur sous windows.

                        Je n'insiste pas pour tout faire en php mais vu de moi c'est aisément faisable de faire en php ce qui est en commentaire en python.

                        A+


                        Yes ça ne marche pas non plus :'(

                        Je ne dis pas non pour des infos concernant le remplacement du code python. J'ai cherché quelque trucs mais rien ne marchait :'(

                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 mai 2022 à 14:35:59

                          Petite question : ton serveur web, je suppose que c'est wamp donc apache. Cela me semble bizarre que son espace soit sous F: car en général tu installes wamp dans C:\program files sous windows, non ? Je ne suis pas sûr du path mais le F: me semble bizarre.

                          A+

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 mai 2022 à 14:42:39

                            J'ai juste modifié le chemin d'installation
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 mai 2022 à 15:23:25

                              Alors ne connaissant pas ou peu windows, j'espère que cela ne fout pas la grouille d'installer wamp dans un lecteur différent du C:\Program files classique.

                              Tu peux redonner ta ligne de commande avec les path complets ?

                              et ce que donne le var_dump ?

                              A+

                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 mai 2022 à 10:31:17

                                Bonjour,

                                J'ai crée un nouveau dossier où se trouve seulement index.php qui contient :

                                <?php
                                
                                $data = 'bonjour'; // je redéfini data pour le test php to python
                                //$output = shell_exec("py C:/Users/antoi/AppData/Local/Programs/Python/Python310/script.py " . $data);
                                $output = exec("py F:/wamp/www/test/test.py " . $data);
                                var_dump ($output);
                                
                                ?>

                                et test.py qui contient :

                                from pandas import array
                                from pytrends.request import TrendReq
                                import json 
                                import numpy as np
                                import sys
                                import logging
                                
                                result = sys.argv[1]
                                print(result)
                                with open('F:/wamp/www/test/data.json', 'w') as mon_fichier:
                                    json.dump(result, mon_fichier)

                                Mon var_dump me retourne 'null' quand j'utilise 'shell_exec' et me retourne un string vide quand j'utilise 'exec'

                                Je suis bloqué et je ne sais vraiment pas quoi faire.

                                Merci 


                                -
                                Edité par IteWaseMi 18 mai 2022 à 11:50:00

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 mai 2022 à 12:35:41

                                  Salut

                                  Je pense que, comme précisé dans un autre message ci-dessus, il pourrait aider de mettre le chemin complet de l'exécutable py (donc le premier paramètre) plutôt que juste son nom. A moins que tu ne nous certifies que ce chemin soit renseigné dans la variable PATH de Windows ?

                                  Si jamais, ce n'est pas un souci d'installer WampServer sur un autre lecteur.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 mai 2022 à 14:22:32

                                    Ymox a écrit:

                                    Salut

                                    Je pense que, comme précisé dans un autre message ci-dessus, il pourrait aider de mettre le chemin complet de l'exécutable py (donc le premier paramètre) plutôt que juste son nom. A moins que tu ne nous certifies que ce chemin soit renseigné dans la variable PATH de Windows ?

                                    Si jamais, ce n'est pas un souci d'installer WampServer sur un autre lecteur.


                                    J'ai donc 2 executable pyton, un qui s'appelle python.exe et l'autre python3.exe ce qui donne :

                                    <?php
                                    
                                    $data = 'bonjour'; // je redéfini data pour le test php to python
                                    $output = shell_exec("C:/Users/antoi/AppData/Local/Microsoft/WindowsApps/python3.exe C:/Users/antoi/AppData/Local/Programs/Python/Python310/script.py " . $data);
                                    //$output = shell_exec("C:/Users/antoi/AppData/Local/Microsoft/WindowsApps/python3.exe F:/wamp/www/test/test.py " . $data);
                                    var_dump ($output);
                                    
                                    ?>

                                    mais malheureusement j'obtiens le même résultat :'(

                                    -
                                    Edité par IteWaseMi 18 mai 2022 à 14:24:20

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 mai 2022 à 15:09:55

                                      Encore une fois je ne connais pas trop les plateformes windows mais je pensais que les programmes type système (...) allaient sous un chemin type C:\Programmes. Comme sous Linux les programmes sont sous /usr/bin (en grande partie).

                                      De plus il me semblait que sous windows ce n'était pas slash le séparateur mais anti-slash et même qu'il faut le doubler.

                                      Or là ton python est sous Users avec des slashs.

                                      La version courante actuelle de python est bien la 3.

                                      Après avoir revu ces points et si cela ne fonctionne toujours pas.

                                      1) je ferai une installation classique de wamp sur le lecteur C: et non sur un F:

                                      2) je mettrai le python également sous C:\Programmes

                                      3) je ferai le script de lancement avec les path complets et tenant compte du séparateur sous windows.

                                      ....

                                      4) j'arrêterai de vouloir empiler un interpréteur php qui lance un interpréteur python qui lance un script python : cf mes différentes remarques ci-dessus

                                      A+

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 mai 2022 à 10:15:40

                                        Bonjour,

                                        Merci pour l'aide que tu m'apportes mais malheureusement rien ne marche dans ce que tu m'as conseillé.... J'ai créé le même projet sur une machine et j'ai encore le même problème... 

                                        pour le conseille n°4 je veux bien que tu me donnes une autre solution mais malheureusement je n'en ai pas.

                                        A+

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mai 2022 à 11:02:31

                                          1) tu peux donc refournir le code actuel après application de mes 3 points ci-dessus ?

                                          2) De ce que je vois de ton code python : tu manipules des tableaux que tu mets à jour dans un fichier : c'est cela ?

                                          A+

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            20 mai 2022 à 11:59:10

                                            C'est bon j'ai trouvé la solution :

                                            $command = escapeshellcmd('python test.py');
                                            $output = shell_exec($command);     
                                            echo $output;

                                            Merci pour votre aide !

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 mai 2022 à 14:14:43

                                              Bon, admettons car je ne vois pas trop ce qu'apporte le escapeshellcmd : https://www.php.net/manual/fr/function.escapeshellcmd.php

                                              Si cela fonctionne ....

                                              Passe en résolu.

                                              Bye

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              php à python

                                              × 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