Hello Word in CGI

Bjorn Pettersen bjorn at roguewave.com
Thu Jul 6 14:57:32 EDT 2000


Curtis Jensen wrote:
> 
> Bjorn Pettersen wrote:
> >
> > Curtis Jensen wrote:
> > >
> > > Bjorn Pettersen wrote:
> > > >
> > > > What you're seeing are the symptoms of Python having thrown an exception
> > > > and the weblog not capturing all the information. The solution is to make
> > > > sure Python can only throw where you can grab the exception and do
> > > > something useful with it, like printing it to the browser...  Try the
> > > > following (but make sure you can execute it from the command line first --
> > > > one possible error is a SyntaxError, which this scheme will not save you
> > > > from...)
> > > >
> > > > -- bjorn
> > > >
> > > > #!/usr/bin/env python
> > > > print """Content-type: text/html
> > > >
> > > > """
> > > >
> > > > def main():
> > > >     from time import *
> > > >
> > > >     print "<HTML>"
> > > >     print "<Head>"
> > > >     print "<Title>Hello World</Title>"
> > > >     print "</Head>"
> > > >     print "<Body>"
> > > >     print "<H1>Hello World !</H1>"
> > > >     print "<hr>"
> > > >     print "<P>This is San Diego.<br>Localtime is", ctime( time() ) + ".<P>"
> > > >
> > > >     print "</Body>"
> > > >     print "</HTML>"
> > > >
> > > > import traceback
> > > >
> > > > def execute(fn):
> > > >     # make sure any errors are legible, and directed to the user.
> > > >     try:
> > > >         sys.stderr = sys.stdout
> > > >         fn()
> > > >     except:
> > > >         print '<h1>Something went wrong!!!</h1>'
> > > >         print 'Please send the transcript below to webmaster at your.web<p>'
> > > >         print '\n\n<pre>'
> > > >         traceback.print_exc()
> > > >
> > > > execute(main)
> > > >
> > >
> > > I tried this.  I got the same errors in the log and in the browser.  I
> > > took out the print line since it caused a discussion.  Any more
> > > suggestions?  Thanks.
> >
> > You do need the print line! The first thing your cgi must print out
> > (modulo cookies) is "Content-type: text/html" followed by exactly two
> > newlines (yes, I know there are situations where this isn't true, but in
> > this case it is.. <wink>)
> 
> Sorry, I didn't say witch line.  I took out the print line with the time
> in it.  So now it is a simple hello world script.  By the way, is,
> print 'Content-type: text/html\n\n'
> just as good as they way you have it?  I've tried both.
> 
> >
> > Check that:
> >
> >  - your script is executable (by everyone)
> 
> It is. permissions are 775
> 
> >  - some webservers require a .cgi extension (a symbolic link to your .py
> > will work)
> 
> I tried that and got the same errors
> 
> >  - python is where you think it is, and is executable (again by
> > everyone)
> 
> from the unix prompt, I can run helloworld.py and it prints fine.
> Permissions on python are 755
> 
> >  - your webserver is set up to execute cgi scripts.
> 
> In the same directory as helloword.py there are Pearl cgi scripts that
> run fine.
> 
> > If all that works, try the simplest possible cgi script, something like:
> >
> > #!/usr/local/bin/python
> > print  """Content-type: text/html
> >
> > """
> > print '<h1>hello world</h1>'
> 
> We tried this and got the same problem.
> Anything else?  Thanks for the help so far.

print 'Content-type: text/html\n\n' is fine...

Hmmm... it seems clear that there is something going wrong when the
webserver is trying to execute your script (the errormessage being
"premature end of headers")...

How about

#!/bin/sh
echo "Content-type: text/html"
echo
echo "<h1>hello world</h1>"

if that works, create a text file called yyy.txt and make it world
writable (777), then try:

#!/bin/sh
echo "Content-type: text/html"
echo
/usr/local/httpd/cgi-bin/test_jmsun/cont_forms/helloworld.py >> yyy.txt
2>&1

Your browser should tell you that the document contained no data, but
the yyy.txt file will hopefully contain the error... (you're getting
very close to the limit of my cgi knowledge here ;-)

-- bjorn




More information about the Python-list mailing list