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