[mod_python] Form upload

Terry Macdonald terry.macdonald at dsl.pipex.com
Sat May 20 13:36:50 EDT 2006


Jim Gallacher wrote:
> 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

Thanks again, I get it now ( and I feel a little stoopid :3) )

However, for what its worth I do think it semantically awkward (and 
confusing to newcomers) to think of the request as the response - 
req.write() should send a request in a normal universe but it sends a 
response (yuck):  am I right in thinking that is an Apache way of 
looking at things?

Cheers


More information about the Mod_python mailing list