Code first
import sys
class TestWriter(object):
def __init__(self, stream=sys.stdout):
super(TestWriter, self).__init__()
self.stream = stream
def write(self, line):
self.stream.write(line)
tmp = sys.stdout
f = open('d:\stdout.txt', 'w')
try:
sys.stdout = f
adpt = TestWriter() //如果这里我把f当参数传入,则执行结果如预期。
adpt.write('asdfwe') // 预期字符串写入文本,单事实上字符串输出到了屏幕。
print 'this is import from print' //如预期的输入到了文本
except Exception, e:
sys.stdout = tmp
print e
finally:
sys.stdout = tmp
f.close()
print 'finish'
Problem: As I wrote in the comments, the redirected output of sys.stdout was not implemented when calling TestWriter.write(), but the subsequent print proved that the standard output has been redirected to the file f object.
When tracking breakpoints, self.stream is also displayed as an f object
Solve the doubts! ! !
When Python creates each function, each parameter will be bound, and the default value will not be reloaded as the value changes
But if the default parameter of the binding parameter is bound to the address, it is different. The address remains unchanged, but the content can change.
http://stackoverflow.com/ques...
python interprets each statement sequentially, so
TestWriter
的构造器参数stdout
is not redirected.The above are all my guesses
==================================================== ====================
Run results