[mod_python] Form upload

Jim Gallacher jpg at jgassociates.ca
Fri May 19 08:25:23 EDT 2006


Terry Macdonald wrote:
> Graham Dumpleton wrote:
>>
>> On 19/05/2006, at 8:13 PM, Terry Macdonald wrote:
>>
>>>
>>> "sys.stdout=sys.stderr=req"
>>>
>>> This may be a dumb question but I'm not getting it...
>>> What does the above line do?
>>> Why does one want to set standard error and standard out to the 
>>> request object?
>>> What does printing to the request object do?
>>> ...and how does it work?
>>>
>>> I'm missing something fundamentally object oriented here, aren't I?
>>>
>>> I just see objects that are used to print stuff and then a request 
>>> object which contains request information. I'm not getting the link.
>>
>> Both sys.stderr and sys.stdout are file objects. The primary method 
>> for writing
>> data is the "write()" member function. It is the "write()" member 
>> function that "print"
>> calls on the sys.stdout file object.
>>
>> Outside of mod_python, you could replace sys.stdout with some other 
>> file object,
>> for example an open log file, and every use of "print" in the program 
>> would see that
>> output go to the log file instead.
>>
>> In practice, sys.stdout doesn't actually have to be a file object, 
>> just a file like
>> object which provides a "write()" method. As a "req" object provides a 
>> "write()"
>> function, it could technically thus be used as a substitute for 
>> sys.stdout. As I
>> pointed out in prior email though, this would actually be a dangerous 
>> thing
>> to do in mod_python where a multithreaded MPM is being used.
>>
>> Hope this makes sense.
>>
>> Graham
> Thanks for the help/reply Graham
> 
> So effectively if you print something to the req object it morphs into a 
> response back to the client browser?

Yes, but as Graham says, the safe way to do that in mod_python is:

print >> req, "Stuff"

which is the same as:

req.write("Stuff\n")

Jim


More information about the Mod_python mailing list