2012-01-20 8 views
4

mboxファイルからメールを読み込み、それに基づいて何らかのアクションを行いたいと思います。私はmboxファイルを書いたり変更したりしたくないのですが、別のプロセスで変更されます(ほとんど新しいメールを追加します)。pythonを使ってmboxフォルダからメールを読む

私はこのドキュメントを読んでいます。 http://docs.python.org/library/mailbox.html#mailbox.mbox

しかし、私はメールを読む前に)(ロック呼び出す必要があります私は、次の

  1. を理解していませんか? (私は ファイルに書いていません)
  2. 他のプロセス (thunderbird)がファイルを変更したときにコールバックを取得できますか?
  3. ファイルの変更がmboxオブジェクトに反映されていますか?つまり、mboxオブジェクトを作成した後、新しいメールがファイルに追加された場合、そのオブジェクトを使ってメッセージにアクセスしますか?または、私は再び新しいオブジェクトを作成する必要がありますか?

PS:私は、サンダーバードのいずれかのプラグインをインストールすることができないわけではない:(

+0

この文章は「メールボックス」文書にありますか? msgstr "メッセージが要求されるたびに、新しい表現(通常はMessageインスタンス)がメールボックスの現在の状態に基づいて生成されます。" – jrennie

+0

@jrennie私は、現在の状態は、オブジェクトを介して状態が変更され、ファイルは変更されないことを意味します。私は新しいメールを追加して長さをチェックしようとしましたが、それは同じでした。私は再び新しいオブジェクトを作成したとき、私は追加を見ることができました。 – balki

答えて

2
  1. あなたはmbox形式を変更しないときMailbox.lock()を呼び出す必要がMailbox.lock()(強調のドキュメントからの引用。私自身の):

    あなたはいつもあらゆる修正 にその内容を行う前に、メールボックスをロックする必要があり。 0

  2. ファイルの変更に関する通知は、メールボックスモジュールの範囲外です。 Linuxシステムでは、pyinotifyを使用してこの機能を利用できます。

  3. これ

    documentationに答えている:

    デフォルトのメールボックスのイテレータ繰り返し処理をメッセージ表現ではなく、キー デフォルトの辞書のイテレータが行うように上。さらに、反復中のメールボックスの変更 は安全で明確に定義されています。イテレータが作成された後にメールボックスに追加されたメッセージ は、イテレータには表示されません。 反復子がそれらを生成する前にメールボックスから削除されたメッセージは無視されますが、 のキーを使用すると、その後対応するメッセージが削除された場合に> KeyError例外が発生する可能性があります。

    つまり、mboxファイルが変更された後で、新しいMailboxインスタンスを作成する必要があります。

関連する問題