如何创建上下文管理器阻止pywhatkit生成日志并实现多管理器with调用
解决方案
1. 阻止生成pywhatkit_dbs.txt日志的上下文管理器
思路是在执行目标函数前备份原有日志文件(如果存在),函数执行后删除新生成的日志、恢复原有文件内容,完全屏蔽本次调用产生的日志写入。对应类代码如下:
import os class HiddenPyWhatKitLogs: def __enter__(self): self.log_file_name = "pywhatkit_dbs.txt" self.file_existed = os.path.exists(self.log_file_name) # 备份原有日志文件内容 if self.file_existed: with open(self.log_file_name, "r", encoding="utf-8") as f: self.old_content = f.read() return self def __exit__(self, exc_type, exc_val, exc_tb): # 删除本次调用生成的日志文件 if os.path.exists(self.log_file_name): os.remove(self.log_file_name) # 恢复进入上下文前的文件状态 if self.file_existed: with open(self.log_file_name, "w", encoding="utf-8") as f: f.write(self.old_content)
2. 同时使用两个上下文管理器的方法
Python的with语句原生支持同时声明多个上下文管理器,直接用逗号分隔即可,不需要嵌套:
import sys import os import pywhatkit # 保留你原来的HiddenPrints类 class HiddenPrints: def __enter__(self): self._original_stdout = sys.stdout sys.stdout = open(os.devnull, 'w') def __exit__(self, exc_type, exc_val, exc_tb): sys.stdout.close() sys.stdout = self._original_stdout # 调用示例 with HiddenPrints(), HiddenPyWhatKitLogs(): # 替换为你实际的调用参数 pywhatkit.sendwhatmsg_instantly("+861xxxxxxxxx", "测试消息")
内容的提问来源于stack exchange,提问作者user2401856
相关产品推荐
相关产品推荐

