python2.7 - Soalan tentang ubah hala stdout Python 2.7
伊谢尔伦
伊谢尔伦 2017-05-18 10:48:16
0
2
643

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(2)
巴扎黑
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]
阿神

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!