Maison  >  Questions et réponses  >  le corps du texte

python2.7 - Questions sur la redirection de sortie standard Python 2.7

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 ! ! !

伊谢尔伦伊谢尔伦2712 Il y a quelques jours646

répondre à tous(2)je répondrai

  • 巴扎黑

    巴扎黑2017-05-18 10:50:16

    def __init__(self, stream=sys.stdout)
    

    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

    # coding: utf-8
    
    D = 2 
    class Test:
        def __init__(self, a=D):
            print a
    
    
    if __name__ == '__main__':
        D = 3 
        t = Test()
        print D
    
    inner function:  2
    outer function: 3
    

    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.

    # coding: utf-8
    
    D = [3] 
    class Test:
        def __init__(self, a=D):
            print "inner function: ", a
    
    
    if __name__ == '__main__':
        D[0] = 2
        t = Test()
        print "outer function:", D
       
    inner function:  [2]
    outer function: [2]
    

    répondre
    0
  • 阿神

    阿神2017-05-18 10:50:16

    En revanche, en Python, l'exécution commence en haut d'un fichier et se déroule dans un ordre bien défini à travers chaque instruction du fichier, ...

    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

    ================================================= === ====================

    import sys
    
    class A:
        def __init__(self, stream=sys.stdout):
            print(stream)
    
    f = open('test.txt', 'w')
    
    a = A()
    
    sys.stdout = f
    
    print(sys.stdout)
    

    Résultats d'exécution

    répondre
    0
  • Annulerrépondre