zoukankan      html  css  js  c++  java
  • 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("
    ")
           if len(str):self.processInfo(str)  #对输出信息进行处理的方法
        
        def processInfo(self,info):
            self.stdoutbak.write("标准输出接收到消息:"+info+"
    ") #可以将信息再输出到原有标准输出,在定位问题时比较有用
    	
        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("主程序结束")
  • 相关阅读:
    【Leetcode】23. Merge k Sorted Lists
    【Leetcode】109. Convert Sorted List to Binary Search Tree
    【Leetcode】142.Linked List Cycle II
    【Leetcode】143. Reorder List
    【Leetcode】147. Insertion Sort List
    【Leetcode】86. Partition List
    jenkins 配置安全邮件
    python 发送安全邮件
    phpstorm 同步远程服务器代码
    phpUnit 断言
  • 原文地址:https://www.cnblogs.com/ghl666/p/12700201.html
Copyright © 2011-2022 走看看