我正在捕获我的脚本的stderr,以后可以通过以下方式保存到数据库:
ostderr = sys.stderr
sys.stderr = StringIO()
# do stuff
mymodel.errors = sys.stderr.getvalue()
mymodel.save()
print mymodel.errors
sys.stderr = ostderr
不幸的是,这使得随意调试变得更加困难,因为如果发生任何错误,我将不会看到它们,直到脚本终止。
如何在字符串中捕获stderr,就像我上面所做的那样,但仍然可以实时显示给控制台?
答案 0 :(得分:3)
使用类似文件的对象,同时保存并打印到常规stderr。类似的东西:
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
您可能还需要支持closed
,flush
等内容,具体取决于#do stuff
中发生的情况。如果您继承自StringIO
。