Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/07/2015, à 10:51

xav01

Exécution de scripts python depuis une page web (CGI)

Bonjour,

Je rame depuis plus d'une semaine sur un usage qui me semble assez basique : lancer un script python depuis une page web.
La littérature est très riche sur la question (j'ai bien lu la conversation suivante, mais je ne m'en sors pas pour autant), plein de gens ont l'air de faire des trucs géniaux, ... et je n'arrive à pas grand chose.

Ma page web est en local sur mon poste (sou linux mint 17), les scripts sont dans un sous-répertoire cgi-bin, et ils sont exécutables par tout le monde.

Lorsque j'accède à ma page web depuis le gestionnaire de fichiers, elle se lance et quand je clique sur "exécuter le script" firefox me propose de télécharger le fichier .py au lieu de le lancer.
Lorsque j'accède à ma page web par localhost/script, elle se lance et lorsque je clique sur "exécuter le script", j'obtiens "Internal Server Error".

J'ai essayé plein de choses du côté d'apache2:
- j'ai fait sudo a2enmod cgi
- j'ai créé un fichier /etc/apache2/conf-available/python.conf avec

    <Directory /var/www/html>
        Options +ExecCGI
        AddHandler cgi-script .py
    </Directory>

- je l'ai activé avec sudo a2enconf python
- j'ai peut-être fait des bêtises dans /etc/apache2/apache2.conf en rajoutant :

# Lignes rajoutées pour pouvoir exécuter des programmes en python depuis une page web
	AddHandler python-program .py
	PythonHandler test
    PythonDebug On

# Lignes rajoutées pour essayer d'exécuter les scripts via l'interface CGI
# Ces lignes sont à enlever en cas de souci
<Directory "/media/_HOME/xavier/*/cgi-bin">
    Options ExecCGI
    SetHandler cgi-script
</Directory>

Bref j'ai cherché dans tous les sens, je n'y arrive pas, je suis perdu (snif).

Ma page web index.html  (placée dans var/www/html/script/) :

<HTML>
<HEAD><TITLE>Exercice avec Python</TITLE></HEAD>
<BODY>

<DIV ALIGN="center">
<IMG SRC="Tux.svg">
<H2>Page Web interactive</H2>
<P>Cette page est associée à un script Python</P>

<FORM ACTION="./cgi-bin/script.py" METHOD="post">
<INPUT TYPE="submit" NAME="send" VALUE="Exécuter le script">
</FORM>

</DIV></BODY></HTML>

Elle est fortement inspirée du cours de Gérard Swinnen, qu'on trouve en ligne ici ou en pdf , mais il s'agit juste de faire un "hello world" au lieu de transmettre des valeurs.

Pour mon script, j'ai essayé plein de trucs trouvés sur le web:
script 1 (celui de Gérard Swinnen) :

#! /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>
"""

Script 2:

#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello Word - First CGI Program</title>'
print '</head>'
print '</html>'

Script 3 :

#!/usr/bin/python

from mod_python import apache

def handler(req):
   req.content_type="text/html"
   req.send_http_header()
   req.write("Hello World!")
   return apache.OK

Asus Vivobook R415UA-EK181T/ Linux Mint 20.3
Acer Aspire V3-372-53GG  / Linux Mint 20.3

Hors ligne