J'ai un excellent programme en ligne de commande qui imprime sur stdout. Je veux laisser les gens gérer ça à travers CGI. Dans la version CGI, je veux avoir la même sortie (avec "<BR>"
au lieu de "\n"
).Python CGI: Traduire de stdout en html (par exemple remplacer n par <BR>)
Mon cgi_main
fonctionne en appelant my real_main
; Il y a beaucoup d'options à traiter et il était mauvais de le faire plusieurs fois. Mais depuis real_main
appelle print
, je ne sais pas comment changer "\n"
à "<BR>"
post hoc.
Je pourrais facilement changer toutes les instances de print
pour aller à un tempfile
et ensuite vider cela à la fin, mais il semble inélégant de changer tellement la version de la ligne de commande existante.
Une option consiste à appeler real_main
une autre fonction (en passant argv); cette nouvelle fonction renvoie des valeurs. Ensuite, real_main imprime ces valeurs. cgi_main appelle la même fonction, mais imprime les valeurs différemment.
Une autre option consiste à utiliser une classe/fonction statique partout où j'utilise print maintenant. Cette classe pourrait être dit s'il faut reformater ou non. Passer ensuite d'une ligne de commande à une sortie CGI nécessiterait simplement de changer l'argument reform
.
Voici un exemple de la façon dont je pensais que cette classe et la fonction pourrait fonctionner: cgi_tools classe: DEF initialisation (auto, réforme = False): self.reform = réforme def myPrint (self, * args): sinon self.reform: print (args) pour i, x dans énumération (args): si type (x) == str: self.myprint (x.replace ('\ n', '
')), type elif (x) dans les atomes: # vérifier si x est un atome (c.-à-d. Int, float, etc.): print x, autre: self.myprint (x), si i = len (args) -1: print '', print ''
Avec cela, je courais en difficulté en essayant de penser à tous les atomes (à savoir objets irréductibles) en Python. Je ne pouvais pas trouver une fonction intégrée pour ce test, et je pensais que l'écrire moi-même était une idée fragile.
J'ai essayé d'utiliser insepct
d'imprimer le code source de print
, mais je ne pouvais pas faire ça! impression sys.out.print:
import inspect
print inspect.getsource(print) # this does not work!
Tout cela semble être une question de CGI Python classique, mais je ne pouvais pas trouver une bonne solution. Je sais comment assembler les choses d'une manière bâclée et obtenir ce que je veux, mais j'aimerais beaucoup savoir comment être élégant. Je veux grandir, et je ne veux plus programmer de manière désordonnée.
Merci beaucoup pour vos idées et conseils. <br> -Oliver
La source d'impression est en C, pas en python, c'est pourquoi inspect ne renvoie pas la source. – Avery3R
pourquoi ne pas simplement envoyer un en-tête MIME texte/plain au lieu de texte/html? –