Rumah  >  Soal Jawab  >  teks badan

python2.7 - Soalan tentang ubah hala stdout Python 2.7

Dapatkan kod dahulu

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'

Masalah: Seperti yang saya tulis dalam ulasan, output sys.stdout yang diubah hala tidak dilaksanakan apabila memanggil TestWriter.write(), tetapi cetakan seterusnya membuktikan bahawa output standard telah diubah hala ke objek fail f.
Apabila menjejaki titik putus, self.stream juga dipaparkan sebagai objek f
Selesai! ! !

伊谢尔伦伊谢尔伦2712 hari yang lalu647

membalas semua(2)saya akan balas

  • 巴扎黑

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

    def __init__(self, stream=sys.stdout)
    

    Apabila Python mencipta setiap fungsi, setiap parameter akan terikat, dan nilai lalai tidak akan dimuatkan semula apabila nilai berubah

    # 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
    

    Tetapi jika parameter lalai parameter pengikat terikat pada alamat, ia adalah berbeza Alamat tetap tidak berubah, tetapi kandungannya boleh berubah.

    # 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]
    

    balas
    0
  • 阿神

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

    Sebaliknya, dalam Python, pelaksanaan bermula di bahagian atas satu fail dan diteruskan dalam susunan yang jelas melalui setiap pernyataan dalam fail, ...

    http://stackoverflow.com/ques...

    python mentafsir setiap pernyataan secara berurutan, jadi TestWriter的构造器参数stdout tidak diubah hala.

    Di atas semua adalah tekaan saya

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

    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)
    

    Larikan keputusan

    balas
    0
  • Batalbalas