On Wed, 24 May 2006, Christopher Spears wrote:

> I've been working my way through an online tutorial and came across the 
> following sample script:
>
> import sys
>
> class Writer:
>    def __init__(self, filename):
>        self.filename = filename
>    def write(self, msg):
>        f = file(self.filename, 'a')
>        f.write(msg)
>        f.close()

Just as a side note: the 'logging' module in the Standard Library would 
probably be the way to handle things like this.

     http://www.python.org/doc/lib/module-logging.html


> I understand that the class is taking the strings from stdout (supplied 
> by the print statements) and writing them to a text file.

Not exactly.  Something more subtle is happening.  Every call to the print 
statement causes Python to do something like:

     print foo    ====>   sys.stdout.write(str(foo) + "\n")

At least, to a first approximation, that's what 'print' does.

We can try it out by, from a clean interpreter, doing:

######
import sys
sys.stdout.write("hello")
sys.stdout.write("world")
######

We should see "helloworld" because we have not told sys.stdout to write a 
newline to separate the two words.


Going back to the code that you show:

     sys.stdout = Writer('tmp.log')

is explicitely reassigning the standard output file to something else 
entirely.  Future print statements talk to the Writer instance as if it 
were standard output.


Does this distinction clear things up?
_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to