Pour commencer, vérifiez les erreurs d'installation triviales - lire attentivement la section précédente sur l'installation de votre script CGI peut vous faire gagner beaucoup de temps. Si vous vous demandez si vous avez correctement compris la procédure d'installation, essayez d'installer une copie de ce fichier module (cgi.py) comme script CGI. Quand il est invoqué en tant que script, le fichier enverra son environnement et le contenu du formulaire sous forme HTML. Donnez-lui le bon mode, etc, et envoyez-lui une requête. S'il est installé dans le répertoire standard cgi-bin, il devrait être possible de lui envoyer une requête en entrant dans votre navigateur une requête de la forme:
http://votre_nom_d_hote/cgi-bin/cgi.py?nom=Jean+Martin&adresse=A+la+maison
Si on vous renvoie une erreur de type 404, c'est que le serveur ne peut pas trouver le script - il faut peut-être l'installer dans un autre répertoire. Si c'est un autre erreur (par exemple 500), c'est qu'il y a un problème d'installation que vous devez résoudre avant d'aller plus loin. Si vous recevez une liste joliment formattée de votre environnement et du contenu du formulaire (dans cet exemple, les champs devraient être listés comme ``adresse'' avec la valeur ``A la maison'' et ``nom'' avec la valeur ``Jean Martin''), le script cgi.py a été installé correctement. Si vous suivez la même procédure pour votre propre script, vous devriez maintenant être capable de le débugger.
L'étape suivante pourrait être d'appeler la fonction test() du module cgi depuis votre script: remplacer son code principal par la simple instruction
cgi.test()
Ceci devrait donner les mêmes résultats que ceux obtenus en installant le fichier cgi.py lui-même.
Quand un script Python ordinaire déclenche une exception non gérée (par exemple à cause d'une faute de frappe dans le nom d'un module, un fichier qu'on ne peut pas ouvrir, etc.), l'interpréteur Python affiche une trace et se termine. Alors que l'interpréteur Python fera de même quand votre script déclenche une exception, très vraisemblablement la trace échouera dans un fichier de log du serveur HTTP, ou sera purement et simplement ignorée.
Heureusement, à partir du moement où vous vous êtes arrangés pour que votre script exécute un peu de code, il est facile d'intercepter les exceptions et de faire en sorte qu'une trace soit affichée. La fonction test() ci-dessous dans ce module est un exemple. Voici les règles:
sys.stderr la valeur sys.stdoutPar exemple:
import sys
import traceback
print "Content-Type: text/html"
print
sys.stderr = sys.stdout
try:
...votre code ici...
except:
print "\n\n<PRE>"
traceback.print_exc()
Notes: L'affectation de sys.stderr est nécessaire parce que la trace est écrite sur sys.stderr. L'instruction print " est nécessaire pour respecter le formattage du texte en HTML.
\n\n<PRE>"
Si vous suspectez qu'il y ait un problème dans l'importation du module traceback, vous pouvez employer une méthode encore plus robuste (elle ne se sert que de modules intégrés):
import sys sys.stderr = sys.stdout print "Content-Type: text/plain" print ...votre code ici...
On laisse à l'interpréteur Python le soin d'imprimer la trace. Le type de contenu de la sortie est text/plain (texte simple), ce qui désactive tout le traitement du HTML. Si votre script HTML fonctionne, le code HTML brut sera affiché par votre client. S'il déclenche une exception, très probablement après que les deux premières lignes ont été imprimées, une trace sera affichée. Puisqu'il n'y a pas d'interprétation HTML, la trace sera lisible.