想要将控制台的输出保存到文件中时报错: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()
运行结果:
报错定位在you_get依赖包的common.py文件的这个位置:
上面的Logger类都没有buffer属性,因此要在Logger类的__init__方法中添加self.buffer=XXX。
你为什么要给sys.stdout赋值啊
sys.stdout本来是系统类,现在被你赋值了一个数进去,你再次调用的时候肯定就抛错了呀