2009-05-13 25 views

Trả lời

11

Hãy thử reassigning warnings.showwarning ví dụ:

#!/sw/bin/python2.5 

import warnings, sys 

def customwarn(message, category, filename, lineno, file=None, line=None): 
    sys.stdout.write(warnings.formatwarning(message, category, filename, lineno)) 

warnings.showwarning = customwarn 
warnings.warn("test warning") 

sẽ chuyển hướng tất cả các cảnh báo đến stdout.

0

Tôi nghĩ rằng một cái gì đó như thế này sẽ làm việc, mặc dù nó là mã chưa được kiểm tra và giao diện trông giống như có một cách sạch hơn mà eludes tôi có mặt tại địa chỉ:

import warnings 

# defaults to the 'myStringIO' file 
def my_warning_wrapper(message, category, filename, lineno, file=myStringIO, line=None): 
    warnings.show_warning(message, category, filename, lineno, file, line)  

warnings._show_warning = my_warning_wrapper 

Một cái nhìn bên trong Lib \ warnings.py sẽ giúp đưa bạn đi đúng hướng nếu điều đó không đủ.

0
import sys 
import StringIO 

sys.stdout = StringIO.StringIO() 
+1

Chỉ cần một lưu ý - đây là một thực hiện khác nhau từ io.StringIO StringIO.StringIO không có các phương pháp như fileno() được xác định, trong khi io.StringIO có fileno() được xác định nhưng không được thực hiện. – eacousineau

Các vấn đề liên quan