Obtenez d'abord le 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'
Problème : comme je l'ai écrit dans les commentaires, la sortie redirigée de sys.stdout n'est pas implémentée lors de l'appel de TestWriter.write(), mais l'impression suivante prouve que la sortie standard a été redirigée vers l'objet fichier f.
Lors du suivi des points d'arrêt, self.stream est également affiché en tant qu'objet f
Résolu ! ! !
Lorsque Python crée chaque fonction, chaque paramètre sera lié et la valeur par défaut ne sera pas rechargée lorsque la valeur change
Mais si le paramètre par défaut du paramètre de liaison est lié à l'adresse, c'est différent. L'adresse reste inchangée, mais le contenu peut changer.
http://stackoverflow.com/ques...
python interprète chaque instruction séquentiellement, donc
TestWriter
的构造器参数stdout
n'est pas redirigé.Ce qui précède ne sont que mes suppositions
================================================= === ====================
Résultats d'exécution