3

スクリプトの stderr をキャプチャして、後で次の方法でデータベースに保存できます。

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

# do stuff

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

残念ながら、エラーが発生した場合、スクリプトが終了するまでエラーが表示されないため、カジュアルなデバッグがより困難になります。

上記のように stderr を文字列にキャプチャし、リアルタイムでコンソールに表示するにはどうすればよいですか?

4

1 に答える 1

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

于 2012-05-14T02:03:40.337 に答える