Partage
  • Partager sur Facebook
  • Partager sur Twitter

La CGI avec Python

Sujet résolu
    1 mars 2013 à 17:54:32

    Bonjour à tous !

    Dans le cadre d'un mémoire à rendre pour la fac, j'ai développé un script Python capable de construire un fichier XML à partir d'informations qui lui sont données en langage naturel.

    Plus sa base de donnée (ici le fichier XML) est grande, plus il est efficace. Du coup j'ai besoin de réunir une quantité importante d'information, c'est pourquoi je voudrais que le script soit exécutable sur un page web, afin de pouvoir partager le lien avec des amis et qu'ils puissent lui apprendre de nouvelles choses.

    Je décris ça plus abondement ici : http://laocoon.alwaysdata.net/index.html

    Pour l'hébergement je me suis tourné vers alwaysdata, qui a l'avantage d'être gratuit.

    Ma page HTML contient le formulaire suivant :

    <form action="test.py" method="post">
    <label>Votre phrase :</label> <input name="phraseUtilisateur" />
    <input type="submit" name="send" VALUE="Exécuter le script">
    </form>

    le script en question, se trouve dans le même répertoire et contient le code :

    #!/usr/bin/python
     
    print('Content-type: text/html')
    print

    enfin, toujours dans le même répertoire j'ai mis le fichier .htaccess qui contient :

    AddHandler cgi-script .py
    Options +ExecCGI

    J'ai mis 777 pour les permissions de ces deux fichiers et malgré tout, lorsque je veux exécuter le code, je me retrouve avec une erreur 500 :

    http://laocoon.alwaysdata.net/test.py

    Je n'arrive pas à comprendre ce qu'il faut faire, votre aide est donc la bienvenue !

    -
    Edité par Laocoon 1 mars 2013 à 17:57:00

    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2013 à 18:13:25

      Est-ce que tu as accès aux logs de ton serveur ?

      Peut-être qu'il s'y trouve quelques indications (un message d'erreur ou autre) sur ce qui ne colle pas...

      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        1 mars 2013 à 18:17:44

        Oui, j'y ai accès, mais je n'y trouve rien d'utile. Voici ce qui s'affiche dans les logs quand j'essaye d'ouvrir le fichier :

        [Fri Mar 01 18:01:10 2013] [error] (2)No such file or directory: exec of '/home/laocoon/www/test.py' failed
        [Fri Mar 01 18:01:10 2013] [error] [client 78.249.168.64] Premature end of script headers: test.py, referer: http://laocoon.alwaysdata.net/

        -
        Edité par Laocoon 1 mars 2013 à 18:28:06

        • Partager sur Facebook
        • Partager sur Twitter
          1 mars 2013 à 18:26:05

          Edit: rien dit, je vais regarder.

          As-tu essayé d'importer/utiliser le module cgi de la bibliothèque standard Python ?

          -
          Edité par nohar 1 mars 2013 à 18:28:36

          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            1 mars 2013 à 18:46:56

            je viens d'essayer en plaçant la ligne «import cgi » à divers endroits du code : aucun résultat.
            • Partager sur Facebook
            • Partager sur Twitter
              1 mars 2013 à 18:53:44

              Dans le doute, laisse-le au début de ton code. Il a le mérite de faire quelques ajustements de configuration, comme la desactivation du buffering sur la sortie standard.

              Faudrait que j'ouvre un compte sur cet hebergeur pour tester mais je suis un peu short niveau temps. Je reviens vers toi si j'ai du neuf.

              • Partager sur Facebook
              • Partager sur Twitter
              Zeste de Savoir, le site qui en a dans le citron !
                1 mars 2013 à 19:34:08

                Merci beaucoup ! Pas de soucis c'est pas urgent, pour le moment. :D
                • Partager sur Facebook
                • Partager sur Twitter
                  1 mars 2013 à 19:59:55

                  Bon, je viens d'ouvrir un compte et d'essayer.

                  D'abord, j'ai configuré mon serveur pour y accéder en SSH et j'ai défini (dans Environment/Python sur l'interface d'admin) Python 3.1 comme le Python par défaut.

                  Ensuite, voilà grosso-modo ce que j'ai :

                  19:57 nohar@ssh(~)% cd www
                  19:57 nohar@ssh(www)% cat .htaccess 
                  AddHandler cgi-script .py
                  Options +ExecCGI
                  19:57 nohar@ssh(www)% cat helloworld.py 
                  #!/usr/bin/env python3
                  
                  print("Content-type: text/plain")
                  print()
                  print("Hello, world!")
                  19:57 nohar@ssh(www)% chmod +x helloworld.py 
                  19:58 nohar@ssh(www)% ./helloworld.py 
                  Content-type: text/plain
                  
                  Hello, world!
                  

                  Et tu peux tester sur mon serveur, ça marche.

                  Est-ce que le script s'exécute si tu essayes de l'exécuter directement dans ta session SSH ?

                  Edit : J'ai remarqué que si je lance juste python ou /usr/bin/python sur mon serveur, aucun interpréteur n'était exécuté. Tu devrais remplacer ton shebang par ceci :

                  #!/usr/bin/python2.6
                  
                  # ... si tu utilises Python 2, ou bien :
                  
                  #!/usr/bin/python3.1
                  

                  D'ailleurs ton script de test semble faux : soit tu utilises la fonction print() de Python 3, soit l'instruction print de Python 2, mais pas les deux à la fois.

                  PS : Ton projet a l'air passionnant. Tu as une copie du mémoire déjà lisible quelque part ?

                  -
                  Edité par nohar 1 mars 2013 à 20:24:50

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Zeste de Savoir, le site qui en a dans le citron !
                    1 mars 2013 à 21:05:19

                    Alors déjà merci beaucoup car il se trouve que comme un abruti fini j'oubliais la ligne « cd www » donc c'est sur que c'était pas près de fonctionner.

                    EDIT Ça y est ça marche ! c'était tout con !

                    http://wiki.alwaysdata.com/wiki/Tutorial_CGI

                    il fallait rajouter la ligne :

                    dos2unix test.py

                    Merci infiniment pour ton aide ! Je suppose que la différence entre toi et moi venait du fait que je suis sous windows, non ?

                    EDIT2 : Arf du coup en éditant j'ai supprimé une partie de ma réponse :

                    Le mémoire et le script sont encore en cours de rédaction, mais dès qu'ils seront terminés je serais ravi de partager toute la documentation !

                    Encore merci !

                    -
                    Edité par Laocoon 1 mars 2013 à 21:12:28

                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 mars 2013 à 21:14:01

                      Le ^M dans cette ligne me met la puce à l'oreille :

                      -bash: ./test.py: /usr/bin/python3^M
                      

                      Tu développes sous Windows ? Tes fichiers sont bien encodés en utf-8 ? Essaye de lancer bêtement /usr/bin/python3.1 ? Tu devrais rajouter une fin de ligne à la fin de ton fichier .htaccess et de ton script.

                      Edit : Ah bah voilà, c'était bien une erreur d'encodage. :D

                      PS : Avec plaisir pour la doc !

                      -
                      Edité par nohar 1 mars 2013 à 21:15:57

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Zeste de Savoir, le site qui en a dans le citron !

                      La CGI avec 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