2012-05-14 28 views
3

我捕捉我的腳本的錯誤輸出到我以後可以通過保存到數據庫:如何重定向Python的錯誤輸出到字符串,同時還顯示

ostderr = sys.stderr 
sys.stderr = StringIO() 

# do stuff 

mymodel.errors = sys.stderr.getvalue() 
mymodel.save() 
print mymodel.errors 
sys.stderr = ostderr 

不幸的是,這使得休閒調試更加困難,因爲如果有的話發生錯誤,直到腳本終止,我纔會看到它們。

我如何在字符串中捕獲stderr,就像我在上面做的那樣,但仍然可以實時顯示到控制檯?

+1

只需將stdout更改爲stderr: http://stackoverflow.com/a/616686/37205 – falcojr

+0

@falcojr,對於我的應用程序,我需要將stdout和stderr分開。 – Cerin

回答

2

使用類似文件的對象,既可以保存並打印到常規標準錯誤。喜歡的東西:

class TeeFiles(object): 
    def __init__(self, file): 
     self.sio = StringIO() 
     self.file = file 

    def write(self, txt): 
     self.sio.write(txt) 
     self.file.write(txt) 

sys.stderr = TeeFiles(sys.stderr) 

# do stuff 

mymodel.errors = sys.stderr.sio.getvalue() 
mymodel.save() 
sys.stderr = sys.stderr.file 

您可能需要支持像closedflush等東西爲好,取決於#do stuff會發生什麼。如果從StringIO繼承,這可能會更容易。

相關問題