sys.stdout标准输出将控制台所有信息输出打印到文件

用于DL训练输出日志

#log.py
class Logger(object):
    def __init__(self,fileN ="Default.log"):
        self.terminal = sys.stdout
        self.log = open(fileN,"a")
 
    def write(self,message):
        self.terminal.write(message)
        self.log.write(message)
 
    def flush(self):
        pass
 
sys.stdout = Logger("D:\\1.txt") #这里我将Log输出到D盘
#下面所有的方法,只要控制台输出,都将写入"D:\\1.txt"
print(“sdfghjkl”)

print可以认为把console(命令行)作为一个板子,通过sys.stdout = console指定往console板子上写东西(console是默认的,也就是说你不修改要往哪儿写的话,就会默认往这写),在print 1的时候,就是告诉python,我要写1,然后python就会去sys.stdout所指定的板子里,也就是console(命令行)里写上 1。(标准错误输出也是同样的过程,你会发现当程序出错时,错误信息也会打印在console里面。)

其实只要一个对象具有write方法,就可以被当作“板子”,告诉sys.stdout去哪里写。
说道write方法,第一个想到的可能就是文件操作了。

f=open('log.txt','w')
__console__ = sys.stdout    #把默认的“板子” - 命令行做个备份,以便可以改回来

sys.stdout = f
print 1

sys.stdout = __console__    #恢复
print 2

上面的操作,通过sys.stdout = f 指定打印时的板子改成了 f。所以在使用print的时候,不再是把1打印在命令行里,而是写在了log.txt文件里面。

后面又把板子改成了命令行,此时print 2就又把2打印到命令行了

猜你喜欢

转载自blog.csdn.net/wezard95/article/details/105213660