2012-05-10 7 views
0

私の現在のプロジェクトでは、stdout依存バージョンまたは少なくともフォーマットされたstdoutをログファイルに書き込む方法を見つける必要があります。 現在、私はちょうどsubprocess.Popen(exec、stdout = log)を使用しています。このファイルはフォーマットされていません。stdoutを使ってログファイルをカスタマイズする

最高のアイデアは、オンザフライで出力をフォーマットし、stdoutをインターセプトし、カスタムモジュールにルーティングし、ifとelifの組み合わせを使用してログに独自の文字列を書き込ませることでした。しかし、私はどのようにこれを行うにはPython 3の文書で何か方法を見つけることができませんでした。私が見つけた最も適切な答えはthis questionで、受け入れられた答えはすでに近くにあります。

しかし、私はちょうど正確に私はstdout =クラスとして使用するクラスを構築する必要があります理解していません。どのメソッドが入力を受け取りますか(どのようにフォーマットされますか)?どちらの方法が必要ですか?それとも、私がやりたいことを達成するための方法が簡単かもしれませんか?

+1

ロギングモジュールを代わりに使用することを検討しましたか?サブプロセスを生成せずに、sys.stdoutを任意のファイル記述子に設定します。 'sys.stdout = open( 'somefile'、 'a')' – jordanm

+0

ログモジュールは私のプロジェクトに合っていません。プリコンパイルされた実行可能ファイルを呼び出すスクリプトなので、変更したいのです/標準出力をフォーマットする。実行可能ファイルをサブプロセスとして開くと、より信頼できます。stdoutはすでにファイル(ログ)に移動していますが、前述のようにフォーマットされていません。 –

答えて

1

は、あなたがそれらを書くなど、読み出し線(と好きなラインのラインでそれを読んで(例えば)と行い、親プロセスがサブプロセスのstdout(および/またはstderr)をキャプチャできるようにするsargeプロジェクトを使用することができます適切にフォーマットされてログファイルに保存されます)。

開示:私はsargeプロジェクトのメンテナです。

+0

これはまさに私が必要なものです、ありがとう!しかし、私の印象に残るのは、互換性とsargeのサイズが限られていることです。スクリプトの長さはわずか200行で、ファイルは1つだけです。だから私は可能な限り軽量な自分の* Capture *クラスを書くことが最善であると思います。あなたのソースから少し学び、出力がどのように正確に処理されるのかを理解しようとします。それが実際に動作すれば、私はあなたとあなたのプロジェクトをヘッダーの行に費やします。 :) –

関連する問題