想要将控制台的输出保存到文件中时报错:AttributeError: 'Logger' object has no attribute 'buffer'

问题遇到的现象和发生背景

想要将控制台的输出保存到文件中时报错:AttributeError: 'Logger' object has no attribute 'buffer'

问题相关代码,请勿粘贴截图
import you_get
import sys

class Logger(object):
    def __init__(self, filename='default.log', stream=sys.stdout):
        self.terminal = stream
        self.log = open(filename, 'w',encoding='utf-8')

    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)
    def flush(self):
        pass
sys.stdout = Logger('a.txt', sys.stdout)
sys.stderr = Logger('a.log_file', sys.stderr)

if __name__ == '__main__':
    # 资源保存目录
    path = 'D:\桌面\百度图片\视频'
    # 下载资源的链接
    url = 'https://bkimg.cdn.bcebos.com/pic/7af40ad162d9f2d3c5649c22aeec8a136227cc82?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U4MA==,g_7,xp_5,yp_5/format,f_auto'

    sys.argv = ['you-get', '-o', path, url]
    you_get.main()

运行结果及报错内容

运行结果:

img

报错定位在you_get依赖包的common.py文件的这个位置:

img

上面的Logger类都没有buffer属性,因此要在Logger类的__init__方法中添加self.buffer=XXX。

你为什么要给sys.stdout赋值啊
sys.stdout本来是系统类,现在被你赋值了一个数进去,你再次调用的时候肯定就抛错了呀