home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
p
/
python
/
!ibrowse
/
files
/
pylibi-6
(
.txt
)
< prev
next >
Wrap
GNU Info File
|
1996-11-14
|
51KB
|
907 lines
This is Info file pylibi, produced by Makeinfo-1.55 from the input file
lib.texi.
This file describes the built-in types, exceptions and functions and the
standard modules that come with the Python system. It assumes basic
knowledge about the Python language. For an informal introduction to
the language, see the Python Tutorial. The Python Reference Manual
gives a more formal definition of the language. (These manuals are not
yet available in INFO or Texinfo format.)
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The
Netherlands.
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI or Corporation for National Research Initiatives or CNRI
not be used in advertising or publicity pertaining to distribution of
the software without specific, written prior permission.
While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address ftp://ftp.python.org.
STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
File: pylibi, Node: Installing your CGI script on a Unix system, Next: Testing your CGI script, Prev: Caring about security, Up: cgi
Installing your CGI script on a Unix system
-------------------------------------------
Read the documentation for your HTTP server and check with your local
system administrator to find the directory where CGI scripts should be
installed; usually this is in a directory `cgi-bin' in the server tree.
Make sure that your script is readable and executable by "others"; the
Unix file mode should be 755 (use `chmod 755 filename'). Make sure
that the first line of the script contains `#!' starting in column 1
followed by the pathname of the Python interpreter, for instance:
#!/usr/local/bin/python
Make sure the Python interpreter exists and is executable by "others".
Make sure that any files your script needs to read or write are
readable or writable, respectively, by "others" - their mode should be
644 for readable and 666 for writable. This is because, for security
reasons, the HTTP server executes your script as user "nobody", without
any special privileges. It can only read (write, execute) files that
everybody can read (write, execute). The current directory at
execution time is also different (it is usually the server's cgi-bin
directory) and the set of environment variables is also different from
what you get at login. in particular, don't count on the shell's
search path for executables (`$PATH') or the Python module search path
(`$PYTHONPATH') to be set to anything interesting.
If you need to load modules from a directory which is not on Python's
default module search path, you can change the path in your script,
before importing other modules, e.g.:
import sys
sys.path.insert(0, "/usr/home/joe/lib/python")
sys.path.insert(0, "/usr/local/lib/python")
(This way, the directory inserted last will be searched first!)
Instructions for non-Unix systems will vary; check your HTTP server's
documentation (it will usually have a section on CGI scripts).
File: pylibi, Node: Testing your CGI script, Next: Debugging CGI scripts, Prev: Installing your CGI script on a Unix system, Up: cgi
Testing your CGI script
-----------------------
Unfortunately, a CGI script will generally not run when you try it from
the command line, and a script that works perfectly from the command
line may fail mysteriously when run from the server. There's one
reason why you should still test your script from the command line: if
it contains a syntax error, the python interpreter won't execute it at
all, and the HTTP server will most likely send a cryptic error to the
client.
Assuming your script has no syntax errors, yet it does not work, you
have no choice but to read the next section:
File: pylibi, Node: Debugging CGI scripts, Next: Common problems and solutions, Prev: Testing your CGI script, Up: cgi
Debugging CGI scripts
---------------------
First of all, check for trivial installation errors - reading the
section above on installing your CGI script carefully can save you a
lot of time. If you wonder whether you have understood the
installation procedure correctly, try installing a copy of this module
file (`cgi.py') as a CGI script. When invoked as a script, the file
will dump its environment and the contents of the form in HTML form.
Give it the right mode etc, and send it a request. If it's installed
in the standard `cgi-bin' directory, it should be possible to send it a
request by entering a URL into your browser of the form:
http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home
If this gives an error of type 404, the server cannot find the script -
perhaps you need to install it in a different directory. If it gives
another error (e.g. 500), there's an installation problem that you
should fix before trying to go any further. If you get a nicely
formatted listing of the environment and form content (in this example,
the fields should be listed as "addr" with value "At Home" and "name"
with value "Joe Blow"), the `cgi.py' script has been installed
correctly. If you follow the same procedure for your own script, you
should now be able to debug it.
The next step could be to call the `cgi' module's test() function from
your script: replace its main code with the single statement
cgi.test()
This should produce the same results as those gotten from installing
the `cgi.py' file itself.
When an ordinary Python script raises an unhandled exception (e.g.
because of a typo in a module name, a file that can't be opened, etc.),
the Python interpreter prints a nice traceback and exits. While the
Python interpreter will still do this when your CGI script raises an
exception, most likely the traceback will end up in one of the HTTP
server's log file, or be discarded altogether.
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'
4. Wrap all remaining code in a try-except statement
5. 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 "nn<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. Bec