File: hand-cgi.html

package info (click to toggle)
libapache-mod-python 2%3A2.7.11-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,328 kB
  • ctags: 848
  • sloc: ansic: 2,785; python: 1,115; sh: 299; makefile: 285
file content (138 lines) | stat: -rw-r--r-- 5,194 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>6.2 CGI Handler</title>
<META NAME="description" CONTENT="6.2 CGI Handler">
<META NAME="keywords" CONTENT="modpython">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<link rel="STYLESHEET" href="modpython.css">
<link rel="first" href="modpython.html">
<link rel="contents" href="contents.html" title="Contents">
<link rel="index" href="genindex.html" title="Index">
<LINK REL="next" href="hand-httpdapy.html">
<LINK REL="previous" href="hand-pub.html">
<LINK REL="up" href="handlers.html">
<LINK REL="next" href="hand-httpdapy.html">
</head>
<body>
<DIV CLASS="navigation">
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><A HREF="node74.html"><img src="icons/previous.gif"
  border="0" height="32"
  alt="Previous Page" width="32"></A></td>
<td><A href="handlers.html"><img src="icons/up.gif"
  border="0" height="32"
  alt="Up One Level" width="32"></A></td>
<td><A href="hand-httpdapy.html"><img src="icons/next.gif"
  border="0" height="32"
  alt="Next Page" width="32"></A></td>
<td align="center" width="100%">Mod_python Manual</td>
<td><A href="contents.html"><img src="icons/contents.gif"
  border="0" height="32"
  alt="Contents" width="32"></A></td>
<td><img src="icons/blank.gif"
  border="0" height="32"
  alt="" width="32"></td>
<td><A href="genindex.html"><img src="icons/index.gif"
  border="0" height="32"
  alt="Index" width="32"></A></td>
</tr></table>
<b class="navlabel">Previous:</b> <a class="sectref" HREF="node74.html">6.1.3 Form Data</A>
<b class="navlabel">Up:</b> <a class="sectref" href="handlers.html">6. Standard Handlers</A>
<b class="navlabel">Next:</b> <a class="sectref" href="hand-httpdapy.html">6.3 Httpdapy handler</A>
<br><hr>
</DIV>
<!--End of Navigation Panel-->

<H1><A NAME="SECTION008200000000000000000">&nbsp;</A>
<BR>
6.2 CGI Handler
</H1>

<P>
<a name="l2h-157">&nbsp;</a>
<P>
CGI handler is a handler that emulates the CGI environment under mod_python. 

<P>
Note that this is not a "true" CGI environment in that it is emulated
at the Python level. <code>stdin</code> and <code>stdout</code> are provided by
substituting <code>sys.stdin</code> and <code>sys.stdout</code>, and the environment
is replaced by a dictionary. The implication is that any outside programs
called from within this environment via <code>os.system</code>, etc. will
not see the environment available to the Python program, nor will they
be able to read/write from standard input/output with the results expected
in a "true" CGI environment.

<P>
The handler is provided as a stepping stone for the migration of legacy
code away from CGI. It is not recommended that you settle on using
this handler as the preferred way to use mod_python for the long term.

<P>
To use it, simply add this to your <span class="file">.htaccess</span> file: 

<P>
<dl><dd><pre class="verbatim">
SetHandler python-program
PythonHandler mod_python.cgihandler
</pre></dl>

<P>
As of version 2.7, the cgihandler will properly reload even indirectly
imported modules. This is done by saving a list of loaded modules
(sys.modules) prior to executing a CGI script, and then comparing it
with a list of imported modules after the CGI script is done.  Modules
(except for whose whose __file__ attribute points to the standard
Python library location) will be deleted from sys.modules thereby
forcing Python to load them again next time the CGI script imports
them.

<P>
If you do not want the above behavior, edit the <span class="file">cgihandler.py</span>
file and comment out the code delimited by ###.

<P>
Tests show the cgihandler leaking some memory when processing a lot of
file uploads. It is still not clear what causes this. The way to work
around this is to set the Apache <code>MaxRequestsPerChild</code> to a non-zero
value.

<P>

<DIV CLASS="navigation">
<p><hr>
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><A HREF="node74.html"><img src="icons/previous.gif"
  border="0" height="32"
  alt="Previous Page" width="32"></A></td>
<td><A href="handlers.html"><img src="icons/up.gif"
  border="0" height="32"
  alt="Up One Level" width="32"></A></td>
<td><A href="hand-httpdapy.html"><img src="icons/next.gif"
  border="0" height="32"
  alt="Next Page" width="32"></A></td>
<td align="center" width="100%">Mod_python Manual</td>
<td><A href="contents.html"><img src="icons/contents.gif"
  border="0" height="32"
  alt="Contents" width="32"></A></td>
<td><img src="icons/blank.gif"
  border="0" height="32"
  alt="" width="32"></td>
<td><A href="genindex.html"><img src="icons/index.gif"
  border="0" height="32"
  alt="Index" width="32"></A></td>
</tr></table>
<b class="navlabel">Previous:</b> <a class="sectref" HREF="node74.html">6.1.3 Form Data</A>
<b class="navlabel">Up:</b> <a class="sectref" href="handlers.html">6. Standard Handlers</A>
<b class="navlabel">Next:</b> <a class="sectref" href="hand-httpdapy.html">6.3 Httpdapy handler</A>
<hr>
<span class="release-info">Release 2.7.10, documentation updated on December 07, 2003.</span>
</DIV>
<!--End of Navigation Panel-->

</BODY>
</HTML>