0

Python を使用して、DreamHost でホストされている Web サイトに取り組んでいます。しばらくの間、CGI を使用して Python スクリプトを実行するデフォルトのセットアップを使用していました。うまくいきましたが、トラフィックが多いと動作が遅くなり、メモリを大量に消費するのではないかと心配だったので、このモジュールを使用して FastCGI に切り替えました。

全体的には問題なく動作しますが、大きな問題が 1 つあります。それは、標準エラー ストリームに書き込まれたものが何も見えないことです。何か問題が発生した場合、それに対して何をすべきかについての私の通常の有用な手がかりは機能しなくなります. 以前は、Apache エラー ログで標準エラーに送信された内容を確認していました。今、それはちょうど消えているようです。

テスト スクリプトを作成し、sys.stderr.write (さまざまな場所から) と、environ["wsgi.errors"].write (アプリ内から) を使用して文字列を書き込んでみました。ここで、environ はアプリに渡される最初のパラメーターです。 WSGI/FastCGI ラッパー)。いずれにせよ、私はそれらを見つけることができませんでした。このデータにアクセスする理由や方法を知っている人はいますか?

FastCGI を使用するのはこれが初めてなので、この fcgi モジュールを使用して間違った選択をしている場合はお知らせください。

4

1 に答える 1

2

システム内の何かがファイル記述子 2 (「実際の」stderr) をキャプチャしている場合sys.stderr、オープンで書き込み可能な任意のファイル オブジェクト、またはファイルのようなオブジェクト (基本的には を実装する必要があるだけです) に割り当てることができます --インスタンスwriteを含みますその値は、そのメソッドcStdIO.StdIOを呼び出すことでいつでも (閉じる前に) 取得できます。.getvalue()

コードを終了する直前にキャッチされていない例外をキャプチャするには、sys.excepthookに、情報を取得して任意の方法で発行する関数を割り当てます。または、例外がなくても書き込まれたものをすべて取得して発行するにはsys.stderr(それが必要な場合-質問からはわかりません)、atexitを使用してgrab-info-and-emit-it関数を登録します。

于 2010-07-14T05:19:56.533 に答える