class Logger(object): def __init__(self, file_path: str = "D:/T4/test.jpg/Default.log"): self.terminal = sys.stdout self.log = open(file_path, "a") def write(self, message): self.terminal.write(message) self.log.write(message) def flush(self): pass
时间: 2024-04-12 21:34:00 浏览: 130
你好!对于你的代码,这是一个简单的日志记录器类。它的作用是将输出同时写入到终端(stdout)和日志文件中。日志文件的路径是通过构造函数的`file_path`参数传入的,默认为"D:/T4/test.jpg/Default.log"。这个类重写了`write`方法和`flush`方法来实现这个功能。
在`__init__`方法中,它将终端(stdout)保存在`self.terminal`变量中,并将日志文件以追加模式打开,并保存在`self.log`变量中。
`write`方法将消息同时写入到终端和日志文件中,它调用了`self.terminal.write`方法将消息写入到终端,然后调用了`self.log.write`方法将消息写入到日志文件。
`flush`方法在这里没有实际的操作,但通常用于清空缓冲区。
这个类可以用来将程序的输出同时打印到终端和写入到指定的日志文件中,方便调试和记录程序运行时的信息。
相关问题
import sys #from config_pz import * from playsound import playsound from aip import AipSpeech APP_ID='26593538' API_KEY='wBgsY1pmUCOcRCSq9o0pIaEW' SECRET_KEY='KqC7ajhNi33Owf7aVRAsR2Ujbwruwp3G' test_img = r"E:/Power_E/PythonWork/term3/t4/test.jpg" test_tensor = load_and_preprocess_image(test_img) test_tensor = tf.expand_dims(test_tensor, axis=0) pred = model.predict(test_tensor) class Logger(object): def __init__(self, file_path: str = "E:/Power_E/PythonWork/term3/t4/Default.log"): self.terminal = sys.stdout self.log = open(file_path, "a") def write(self, message): self.terminal.write(message) self.log.write(message) def flush(self): pass if __name__ == '__main__': sys.stdout = Logger('E:/Power_E/PythonWork/term3/t4/log.txt') print(index_to_label.get(np.argmax(pred))) client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) with open(r'E:/Power_E/PythonWork/term3/t4/log.txt', 'r', encoding='gbk') as f: content_s = f.read() result = client.synthesis(content_s, 'zh', 1, { 'vol': 5, 'spd': 9, 'pit': 7, 'per': 4, }) if not isinstance(result, dict): with open('E:/Power_E/PythonWork/term3/t4/auido.mp3', 'wb') as f: f.write(result) playsound("E:/Power_E/PythonWork/term3/t4/auido.mp3")
这段代码看起来是使用Python来将文本转为语音并播放的程序。它使用了百度AI的语音合成接口(AipSpeech)将文本转换为语音,并使用playsound模块播放生成的音频文件。注意,您需要在百度AI平台上注册并获取相应的APP_ID、API_KEY和SECRET_KEY来使用该接口。此外,代码中还包含了一些路径和变量的设置,请确保您已经正确配置这些路径和变量。
Traceback (most recent call last): File "E:/PycharmProjects/python-etl/util/logging_util.py", line 35, in <module> init_logger().warning('1') File "E:/PycharmProjects/python-etl/util/logging_util.py", line 15, in init_logger logger = Logging().logger AttributeError: 'Logging' object has no attribute 'logger'
这个错误提示说明,在Logging类中并没有定义一个名为logger的属性。可能是在构造函数__init__中,将logger对象定义为了一个局部变量,而没有存储为对象的属性,导致在init_logger()方法中无法访问到logger属性。建议将__init__方法中的logger对象定义为类属性,即将self.logger定义为类的属性,然后在init_logger()方法中直接访问该属性即可。例如:
```
import logging
from config import project_config as conf
class Logging:
logger = logging.getLogger()
logger.setLevel(logging.INFO)
@staticmethod
def init_logger():
# 对logger对象设置属性,比如输出到文件和日志格式
file_handler = logging.FileHandler(
filename=conf.log_root_path + conf.log_name,
mode='a',
encoding='utf-8'
)
# 设置logger对象的日志格式
fmt = logging.Formatter(
'%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
)
# 将格式设置到文件的handler中
file_handler.setFormatter(fmt)
# 将文件输出的handler设置给logger
Logging.logger.addHandler(file_handler)
return Logging.logger
logger = Logging.init_logger()
logger.warning('1')
```
这里将logger对象定义为Logging类的一个类属性,通过@staticmethod修饰init_logger()方法,使得该方法无需实例化类对象即可调用。在init_logger()方法中,访问Logging.logger属性即可获取到logger对象。
阅读全文