IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Mise en place CGI tuto livre swinnen [Python 2.X]


Sujet :

Réseau/Web Python

  1. #1
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut Mise en place CGI tuto livre swinnen
    Bonjour à tous,

    Je souhaite faire communiquer un script python qui réalise la lecture de données via une carte série RS232 sur interface de mesure industrielle.

    Ensuite les données sont affichées comme un tableau de bord de type météo sur une page web qui donc verra les valeurs actualisées par le biais

    du script python.

    Je suis donc en train de décortiquer le chapitre 17 sur les pages web interactives de l'excellent livre de Gérard Swinnen.

    Pour résumé là où j'en suis :

    Dans le dossier /var/www dans lequel j'ai tous les droits 777

    j'ai le fichier Essais.html ci dessous inspiré du livre :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <HTML>
    <HEAD><TITLE>Exercice avec Python</TITLE></HEAD>
    <BODY>
     
    <DIV ALIGN="center">
    <IMG SRC="Pingouin.jpg">
    <H2>Page Web interactive</H2>
    <P>Cette page est associée à un script Python</P>
     
    <FORM ACTION="input_query.py" METHOD="post">
    <INPUT TYPE="submit" NAME="send" VALUE="Exécuter le script">
    </FORM>
     
    </DIV></BODY></HTML>

    et le script python input_query.py ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/python
     
    # Affichage d'un formulaire HTML simplifié :
    print "Content-Type: text/html\n"
    print """
    <H3><FONT COLOR="Royal blue">
    Page web produite par un script Python
    </FONT></H3>
     
    <FORM ACTION="print_result.py" METHOD="post">
    <P>Veuillez entrer votre nom dans le champ ci-dessous, s.v.p. :</P>
    <P><INPUT NAME="visiteur" SIZE=20 MAXLENGTH=20 TYPE="text"></P>
    <P>Veuillez également me fournir une phrase quelconque :</P>
    <TEXTAREA NAME="phrase" ROWS=2 COLS=50>Mississippi</TEXTAREA>
    <P>J'utiliserai cette phrase pour établir un histogramme.</P>
    <INPUT TYPE="submit" NAME="send" VALUE="Action">
    </FORM>
    """
    Le répertoire /var/www est accessible via le réseau (LAMP installé)

    quand je donne dans mon navigateur sur PC l'adresse 192.168.1.30/Essais.html
    j'ai bien l'affichage de la page web avec le pingouin et le bouton Exécuter le script
    mais quand je clique sur ce bouton mon navigateur veut que je télécharge le script ou que je l'exécute sous windows !!
    Comment le forcer à l’exécuter sur le poste distant.

    Installation matérielle :

    RASPBERRYPI modèle B téléopérer avec Putty et WinSCP depuis le PC.

    Merci de votre aide

    P.G

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 612
    Points : 56 717
    Points
    56 717
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Si on a la même configuration de serveur par défaut (Apache), il faut mettre les scripts CGI dans le répertoire : /usr/lib/cgi-bin

    L'URL du fichier .py est alors http://<adresse IP>/cgi-bin/NomFichier.py

    NomFichier.py doit être rendu exécutable.

  3. #3
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut
    Hello,

    Merci pour votre réponse rapide. Vous avez du comprendre que je débute dans ce domaine.
    J'ai vu que vous êtes enseignants, so do i, vous pouvez jeter un oeil ici on est
    peut-être confrère sti2d.patgue.com

    Pour en revenir au problème de cgi effectivement les scripts placés dans usr/lib/cgi-bin fonctionnent
    quand ils sont simples.

    Par contre une erreur 500 Internal Server error survient dès que dans le script input_query.py je met la FORM
    avec l'appel au deuxième script python.

    Je vous pose l'état des lieux :

    Essais.html ok fonctionne

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <HTML>
    <HEAD><TITLE>Exercice avec Python</TITLE></HEAD>
    <BODY>
     
    <DIV ALIGN="center">
    <IMG SRC="Pingouin.jpg">
    <H2>Page Web interactive</H2>
    <P>Cette page est associée à un script Python</P>
     
    <FORM ACTION="http://192.168.1.30/cgi-bin/input_query.py" METHOD="post">
    <INPUT TYPE="submit" NAME="send" VALUE="Exécuter le script">
    </FORM>
     
    </DIV></BODY></HTML>


    Input_query est appelé correctement, vérifié avec juste un hello à l'intérieur par contre
    il provoque une erreur 500 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/usr/bin/env python
    print "Content-Type: text/html"
    print """
    <HEAD>
    <TITTLE>Mini Python Server CGI </TITTLE>
    </HEAD>
    <html>
    <body>
    <H3><FONT COLOR="Royal blue">
    Page web produite par un script Python
    </FONT></H3>
    <h2>Hello World!</h2>
    <FORM METHOD="post" ACTION="http://192.168.1.30/cgi-bin/print_result.py">
    <P>Veuillez entrer votre nom dans le champ ci-dessous, s.v.p. :</P>
    <P><INPUT NAME="visiteur" SIZE=20 MAXLENGTH=20 TYPE="text"></P>
    <P>Veuillez également me fournir une phrase quelconque :</P>
    <TEXTAREA NAME="phrase" ROWS=2 COLS=50>Mississippi</TEXTAREA>
    <P>J'utiliserai cette phrase pour établir un histogramme.</P>
    <INPUT TYPE="submit" NAME="send" VALUE="Action">
    </FORM>
    </body>
    </html>
    """
    Et le deuxième :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/dev python
    # Traitement des données transmises par un formulaire HTML
     
    import cgi # Module d'interface avec le serveur web
    form = cgi.FieldStorage()         # Réception de la requête utilisateur :
    # il s'agit d'une sorte de dictionnaire
    if form.has_key("phrase"):        # La clé n'existera pas si le champ
       text = form["phrase"].value    # correspondant est resté vide
    else:
       text ="*** le champ phrase était vide ! ***"
     
    if form.has_key("visiteur"):      # La clé n'existera pas si le champ
       nomv = form["visiteur"].value  # correspondant est resté vide
    else:
       nomv ="mais vous ne m'avez pas indiqué votre nom"
     
    print "Content-Type: text/html\n"
    print """
    <H3>Merci, %s !</H3>
    <H4>La phrase que vous m'avez fournie était : </H4>
    <H3><FONT Color="red"> %s </FONT></H3>""" % (nomv, text)
     
    histogr ={}
    for c in text:
       histogr[c] = histogr.get(c, 0) +1
     
    liste = histogr.items()       # conversion en une liste de tuples
    liste.sort() # tri de la liste
    print "<H4>Fréquence de chaque caractère dans la phrase :</H4>"
    for c, f in liste:
       print 'le caractère <B>"%s"</B> apparaît %s fois <BR>' % (c, f)
    Tous les fichiers ont tous les droits.

    Merci de l'aide.

    Bonne soirée et à bientôt.

    P.G

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 612
    Points : 56 717
    Points
    56 717
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par P.G Voir le message
    J'ai vu que vous êtes enseignants, so do i, vous pouvez jeter un oeil ici on est peut-être confrère sti2d.patgue.com
    En effet, nous avons les mêmes préoccupations

    L'erreur 500 se produit notamment lorsqu'il manque les droits en exécution des fichiers .py ? Qu'en est-il ?

    Dans Putty, on fait cela avec la commande unix chmod :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo chmod +x NomFichier.py

  5. #5
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut
    Investigations ...

    Après avoir essayé diverses options toutes échec

    je suis aller voir dans le fichier error.log d'apache trouvé son emplacement grâce à google

    le dernier fichier essayé plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #!/usr/bin/env python
     
     
    try:
        # si le fichier existe, lire le nombre
        myfile = open("counter.dat","r")
        number = int(myfile.readline())
        myfile.close()
    except:
        number = 0
     
     
    # avancer le compteur et écraser le fichier
    myfile = open("counter.dat","w")   
    number+=1
    myfile.write(str(number))
    myfile.close()
     
    # afficher la page html
    print "Content-Type: text/html"
    print """
    <HEAD>
    <TITLE>Server Counter</TITLE>
    </HEAD>
    <html>
    <body>
    Nous avons compté %s visites.
    </body>
    </html>
    """ %number
    et dedans il y a des erreurs dans les scripts python sur des caractères non ascii non reconnus en l'occurence le #

    Non-ASCII character '\\xe9' in file /usr/lib/cgi-bin/compteur.py on line 13, but no encoding declared...

    J'ai donc ajouter cette ligne en deuxième ligne de mes scripts :
    # -*- coding: iso-8859-15 -*-

    et là cela fonctionne.

    Merci du coup de main.

    P.G

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PB sur le Tuto - Mise en place PKI - 2008R2
    Par Tomsavokt dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 02/07/2011, 12h11
  2. Choix livres mise en place DB sous Java
    Par bruno_nono dans le forum Persistance des données
    Réponses: 4
    Dernier message: 29/10/2010, 11h26
  3. session sur mise en place du tuto de panier
    Par kosmos-guru dans le forum Langage
    Réponses: 8
    Dernier message: 13/08/2008, 17h55
  4. Recherche tuto pour mise en place d'audit sur win2003.
    Par tomo0013 dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 19/03/2008, 12h08
  5. Mise en place du Contrôleur - Tuto G. Rossolini
    Par Invité dans le forum MVC
    Réponses: 2
    Dernier message: 27/02/2008, 01h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo