[Python-checkins] CVS: python/dist/src/Lib CGIHTTPServer.py,1.20,1.21
Guido van Rossum
gvanrossum@users.sourceforge.net
Fri, 01 Feb 2002 08:28:01 -0800
Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv9084
Modified Files:
CGIHTTPServer.py
Log Message:
Wesley Chun's SF patch 511380: add CGIHTTPServer error supt for Win32
This uses os.popen3 (if it exists) to ensure that errors from a
non-Python CGI script are logged.
Bugfix candidate.
Index: CGIHTTPServer.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/CGIHTTPServer.py,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -d -r1.20 -r1.21
*** CGIHTTPServer.py 2001/10/26 03:38:14 1.20
--- CGIHTTPServer.py 2002/02/01 16:27:59 1.21
***************
*** 42,45 ****
--- 42,46 ----
have_fork = hasattr(os, 'fork')
have_popen2 = hasattr(os, 'popen2')
+ have_popen3 = hasattr(os, 'popen3')
# Make rfile unbuffered -- we need to read one line and then pass
***************
*** 124,128 ****
ispy = self.is_python(scriptname)
if not ispy:
! if not (self.have_fork or self.have_popen2):
self.send_error(403, "CGI script is not a Python script (%s)" %
`scriptname`)
--- 125,129 ----
ispy = self.is_python(scriptname)
if not ispy:
! if not (self.have_fork or self.have_popen2 or self.have_popen3):
self.send_error(403, "CGI script is not a Python script (%s)" %
`scriptname`)
***************
*** 215,221 ****
os._exit(127)
! elif self.have_popen2:
! # Windows -- use popen2 to create a subprocess
import shutil
os.environ.update(env)
cmdline = scriptfile
--- 216,226 ----
os._exit(127)
! elif self.have_popen2 or self.have_popen3:
! # Windows -- use popen2 or popen3 to create a subprocess
import shutil
+ if self.have_popen3:
+ popenx = os.popen3
+ else:
+ popenx = os.popen2
os.environ.update(env)
cmdline = scriptfile
***************
*** 233,237 ****
except:
nbytes = 0
! fi, fo = os.popen2(cmdline, 'b')
if self.command.lower() == "post" and nbytes > 0:
data = self.rfile.read(nbytes)
--- 238,246 ----
except:
nbytes = 0
! files = popenx(cmdline, 'b')
! fi = files[0]
! fo = files[1]
! if self.have_popen3:
! fe = files[2]
if self.command.lower() == "post" and nbytes > 0:
data = self.rfile.read(nbytes)
***************
*** 239,242 ****
--- 248,256 ----
fi.close()
shutil.copyfileobj(fo, self.wfile)
+ if self.have_popen3:
+ errors = fe.read()
+ fe.close()
+ if errors:
+ self.log_error('%s', errors)
sts = fo.close()
if sts: