Holen Sie sich zuerst den Code
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: Wie ich in den Kommentaren geschrieben habe, wird die umgeleitete Ausgabe von sys.stdout beim Aufruf von TestWriter.write() nicht implementiert, aber der anschließende Ausdruck beweist, dass die Standardausgabe an das Datei-f-Objekt umgeleitet wurde.
Beim Verfolgen von Haltepunkten wird self.stream auch als f-Objekt angezeigt
Gelöst! ! !
Python在创建每个函数时,每个参数都会被绑定,默认值不会随着值的改变而重新加载
但如果绑定参数默认参数绑定的是地址,那就不一样,地址不变,内容可以变.
http://stackoverflow.com/ques...
python会顺序解释每条语句,所以
TestWriter
的构造器参数stdout
没有被重定向。以上都是我猜的
=====================================================================
运行结果