CGI Scripts

Harry G. George hgg9140 at skewer.ca.boeing.com
Mon Mar 6 17:17:52 CET 2000


What we need is a debugging mechanism like perl's CGI.pm, where you
can supply input son the commandline or from a file.  I've done that,
along with a fairly complete python rendition of the whole CGI.pm. It
of course sits on top of the python cgi.py.

I could mail it to someone to put on a web site.


Patricia Hawkins <phawkins at spamnotconnact.com> writes:

> 
> >>>>> "AME" == Anders M Eriksson <anders.eriksson at morateknikutveckling.se> writes:
> AME> First I would add two 'debug' lines to the script
> 
> AME> sys.stderr = sys.stdout
> AME> print "Content-Type: text/plain\n"
> 
> ...
> 
> AME> One thing I have noticed is that if I get an error/exception in the
> AME> script then I get somekind of default blank HTML-page.
> 
> Or you could read documentation in cgi.py and follow the debugging
> suggestions contained therein:
> .................
> 
> Fortunately, once you have managed to get your script to execute
> *some* code, it is easy to catch exceptions and cause a traceback to
> be printed.  The test() function below in this module is an example.
> Here are the rules:
> 
> 
>         1. Import the traceback module (before entering the
>            try-except!)
>         
>         2. Make sure you finish printing the headers and the blank
>            line early
>         
>         3. Assign sys.stderr to sys.stdout
>         
>         3. Wrap all remaining code in a try-except statement
>         
>         4. In the except clause, call traceback.print_exc()
> 
> For example:
> 
>         import sys
>         import traceback
>         print "Content-type: text/html"
>         print
>         sys.stderr = sys.stdout
>         try:
>                 ...your code here...
>         except:
>                 print "\n\n<PRE>"
>                 traceback.print_exc()
> 
> Notes: The assignment to sys.stderr is needed because the traceback
> prints to sys.stderr.  The print "\n\n<PRE>" statement is necessary to
> disable the word wrapping in HTML.
> 
> If you suspect that there may be a problem in importing the traceback
> module, you can use an even more robust approach (which only uses
> built-in modules):
> 
>         import sys
>         sys.stderr = sys.stdout
>         print "Content-type: text/plain"
>         print
>         ...your code here...
> 
> This relies on the Python interpreter to print the traceback.  The
> content type of the output is set to plain text, which disables all
> HTML processing.  If your script works, the raw HTML will be displayed
> by your client.  If it raises an exception, most likely after the
> first two lines have been printed, a traceback will be displayed.
> Because no HTML interpretation is going on, the traceback will
> readable.
> 
> When all else fails, you may want to insert calls to log() to your
> program or even to a copy of the cgi.py file.  Note that this requires
> you to set cgi.logfile to the name of a world-writable file before the
> first call to log() is made!
> 
> -- 
> Patricia
> 
> Successfully verbose user of speech recognition software.

-- 
Harry George                E-mail:  harry.g.george at boeing.com 
The Boeing Company          Renton:  (425) 237-6915 
P. O. Box 3707  OY-89       Everett: (425) 266-3149 
Seattle, WA 98124-2207      Page:    (425) 631-8803



More information about the Python-list mailing list