#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