4

mboxファイルからメールを読み、それに基づいて何らかのアクションを実行したいと思います。mboxファイルを書き込み/変更したくないのですが、別のプロセス(ほとんどの場合、新着メールの追加)によって変更されます。

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

しかし、私は次のことを理解していません

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

PS:thunderbirdのプラグインをインストールすることは許可されていません:(

4

1 に答える 1

2
  1. Mailbox.lock()mboxを変更しない場合は、電話をかける必要はありません。Mailbox.lock()(私自身を強調)のドキュメントからの引用:

    メールボックスの内容を変更する前に、必ずメールボックスをロックする必要があります。

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

  3. これはドキュメントでも回答されています:

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

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

于 2012-01-22T13:42:38.660 に答える