2010-04-21 12 views
2

Est-il possible d'utiliser Python comme CGI sans utiliser le module CGI et avoir toujours accès à toutes les informations du navigateur et tout?Utilisation de Python comme script CGI sans le module CGI?

J'ai essayé:

#!/usr/bin/python 
import sys 
print "Content-type: text/html" 
print 
data = sys.stdin.readlines() 
print len(data) 

mais il imprime toujours 0.

Répondre

3

Il est en effet possible, mais beaucoup de l'information est transmise en tant que variables d'environnement, et non sur l'entrée standard. En fait, la seule chose qui est transmise à l'entrée standard est le corps de la requête entrante, qui n'aurait de contenu que si un formulaire est en POST.

Pour plus d'informations sur l'utilisation de CGI, consultez un site Web tel que http://www.w3.org/CGI/. (C'est trop pour expliquer la norme entière dans une réponse ici)

+0

Malheureusement, hoohoo.ncsa, la maison standard précédente de la spécification CGI 1.1 liée ici, a récemment baissé. La même information dans un format moins lisible est disponible dans [RFC 3875] (http://www.ietf.org/rfc/rfc3875) – bobince

1

Bien sûr. cgi est un module utilitaire sans pouvoirs magiques; il ne fait rien que vous ne pouvez pas faire vous-même en lisant et en traitant les variables d'environnement (en particulier QUERY_STRING) et stdin, qui entrent en jeu pour les corps de formulaire POST. (Mais rappelez-vous de lire la variable d'environnement CONTENT_LENGTH et lire seulement que le nombre d'octets, plutôt que d'utiliser readlines(), sinon vous pouvez faire votre script se bloquer en attente pour plus d'entrée qui ne viendra jamais.)

En effet, il existe des alternatives complètes à cgi pour le traitement de la soumission de formulaire, que ce soit en tant que modules autonomes ou dans le cadre d'un cadre.

cgi module ou non, cependant, je ne voudrais pas écrire une application web basée exclusivement sur CGI aujourd'hui. Il vaut mieux écrire sur l'interface WSGI et utiliser wsgiref.handlers.CGIHandler pour déployer cette application WSGI sur CGI. Ensuite, vous pouvez facilement migrer vers une interface de serveur Web plus efficace au fur et à mesure de vos besoins. Vous pouvez utiliser le module cgi à l'intérieur d'une application WSGI pour lire les soumissions de formulaires si vous le souhaitez, ou, encore une fois, faire votre propre chose.