2011-06-23 138 views
3

我的代碼從其他模塊(由其他人寫入)導入函數(import_function)。如何過濾出警告信息

ret = import_function(arg1,arg2) 

該函數在運行時會打印一些警告信息(函數使用print()顯示警告消息)。 問題是:我如何過濾出所有這些警告信息?

我嘗試了以下方法,但它不起作用。

console_redirect = sys.stdout 
sys.stdout = os.devnull 
ret = import_function(arg1,arg2) 
sys.stdout = console_redirect 
+2

sys.stdout!= sys.stderr – tMC

回答

4

我認爲你提供的示例代碼的問題是os.devnull是一個字符串;不是文件對象。您需要將其包裝在open()中。就像這樣:

sys.stderr = open(os.devnull, 'w') 
ret = import_function(arg1,arg2) 
sys.stderr = sys.__stderr__ 

沒有必要備份原來的stdios,它們被保留在sys.__stdin__sys.__stdout__sys.__syserr__

如果您確定輸出是走出來的標準輸出(通過print語句)用標準輸出替換標準錯誤。

+2

這會將* all *輸出吞到被重定向的文件中,並在發生異常時使其保持沉默狀態。 – delnan