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
|