[mod_python] Form upload

Jim Gallacher jpg at jgassociates.ca
Sat May 20 13:43:19 EDT 2006


Terry Macdonald wrote:
> 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?

Yep.

Jim



More information about the Mod_python mailing list