Załóżmy, że mam obiekt podobny do pliku, taki jak StreamIO, i chcę, aby moduł ostrzegawczy Pythona zapisywał do niego wszystkie komunikaty ostrzegawcze. Jak mogę to zrobić?Jak przekierować ostrzeżenia Pythona do strumienia niestandardowego?
6
A
Odpowiedz
11
Spróbuj realokacja warnings.showwarning tj
#!/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")
przekieruje wszystkie ostrzeżenia na standardowe wyjście.
0
Myślę, że coś jak to będzie działać, chociaż jest to kod niesprawdzone i interfejs wygląda jak tam jest bardziej przejrzysty sposób, który mnie obecnie wymyka:
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
Spojrzenie wewnątrz Lib \ warnings.py powinna pomóc postawić jesteś na dobrej drodze, jeśli to nie wystarczy.
0
import sys
import StringIO
sys.stdout = StringIO.StringIO()
Tylko uwaga - jest to inna realizacja od io.StringIO StringIO.StringIO nie ma metody, takie jak FILENO() zdefiniowane, natomiast io.StringIO ma FILENO() zdefiniowane, ale nie realizowane. – eacousineau