stdout和srderr的区别

转载自;https://www.cnblogs.com/LaoYuanPython/p/12634938.html

python中标准输出和错误输出有sys模块的stdout,stderr对象负责,所有print语句以及相关的错误信息输出如果要重定向,只需要创建一个类似文件IO的类并将该类的实例替换sys模块中的stdout,stderr对象即可。

具体步骤如下:

  1. 备份标准输出sys.stdout,stderr对象,以便恢复或做其他处理;
  2. 构建一个支持类似文件io的类;python判断对象是否支持文件IO,是个典型的严重类型处理方式,就是看对象是否实现了读写方法,由于标准输出无需读,只需写,因此只要实现了write方法即可,在对应write方法对捕获输出进行处理,入输出到特定文件或图形化窗口
  3. 使用该类似文件io的类创建一个对象,将其赋值哥sys.stdout。

案例:

import sys
class myStdout(): def __init__(self): self.stdoutbak = sys.stdout self.stderrbak = sys.stderr sys.stdout = self sys.stderr = self def write(self,info): #info信息即标准输出sys.stdout和sys.stderr接收到的输出信息 str = info.rstrip("\r\n") if len(str):self.processInfo(str) #对输出信息进行处理的方法 def processInfo(self,info): self.stdoutbak.write("标准输出接收到消息:"+info+"\n") #可以将信息再输出到原有标准输出,在定位问题时比较有用 def restoreStd(self): print("准备恢复标准输出") sys.stdout = self.stdoutbak sys.stderr = self.stderrbak print("恢复标准输出完成") def __del__(self): self.restoreStd() print("主程序开始运行,创建标准输出替代对象....") mystd = myStdout() print("标准输出替代对象创建完成,准备销毁该替代对象") #mystd.restoreStd() del mystd print("主程序结束")

猜你喜欢

转载自www.cnblogs.com/ghl666/p/12700201.html