2017-08-03 70 views
0

我正在使用此代码将stdout记录到控制台和文件。此代码的作品,将输出“测试”我的console.log文件。但是,如果我运行我的整个脚本/程序并将writer.close()移动到程序终止的末尾,则我的其他代码(可能需要分钟运行)中发生的所有打印都不会写入日志文件?这种方法有没有时间限制?我可以做什么,以便我可以运行可能运行20分钟的脚本/程序并将它们都记录到控制台和日志文件中。下面我的例子再次在快速打印上工作得很好,然后关闭作者。但如果我打印几行几分钟,然后去关闭作家我没有得到任何错误,但仍然console.log文件它是空的?长时间写入控制台和日志文件(Python)

Import sys 

class MyWriter: 

    def __init__(self, stdout, filename): 
     self.stdout = stdout 
     self.logfile = open(filename, 'a') 

    def write(self, text): 
     self.stdout.write(text) 
     self.logfile.write(text) 

    def close(self): 
     self.stdout.close() 
     self.logfile.close() 

    def flush(self): 
     pass 


writer = MyWriter(sys.stdout, os.getcwd() + '\\logs\\console.log') 
sys.stdout = writer 

print("test") 

writer.close() 
sys.exit() 
+0

尝试'self.stdout.flush()'和'self.logfile.flush()'写后。 –

+0

那工作:) geez谢谢我从来没有想到这一点。 –

+0

你可以添加回答,所以我可以打勾 –

回答

1

您需要在写入数据流后刷新流。你可以做,使用f.flush()write

self.stdout.flush() 
self.logfile.flush()