4

我想从 mbox 文件中读取邮件并在此基础上执行一些操作。我不想编写/修改 mbox 文件,但它会被另一个进程修改(主要是添加新邮件)。

我正在阅读这份文档。http://docs.python.org/library/mailbox.html#mailbox.mbox

但我不明白以下内容

  1. 我应该在阅读邮件之前调用 lock() 吗?(我没有写入文件)
  2. 当其他进程(雷鸟)修改文件时,无论如何我可以获得回调吗?
  3. 文件中的更改是否反映在 mbox 对象中?我的意思是,在创建 mbox 对象后,如果将新邮件添加到文件中,我会使用该对象访问邮件吗?还是我应该再次创建一个新对象?

PS:我不允许安装雷鸟的任何插件:(

4

1 回答 1

2
  1. Mailbox.lock()不修改 mbox 时无需调用。Mailbox.lock()(强调我自己的)文档中的引用:

    在对其内容进行任何修改之前,您应该始终锁定邮箱。

  2. 文件更改通知超出了邮箱模块的范围。在 Linux 系统上,您可以使用pyinotify来获得此功能。

  3. 这也在文档中得到了回答:

    默认邮箱迭代器迭代消息表示,而不是像默认字典迭代器那样迭代键。此外,在迭代期间修改邮箱是安全且明确定义的。创建迭代器后添加到邮箱的消息将不会被迭代器看到。在迭代器产生它们之前从邮箱中删除的消息将被静默地跳过,但如果随后删除相应的消息,则使用来自迭代器的键可能会导致 > KeyError 异常。

    简而言之,您需要Mailbox在 mbox 文件更改后创建一个新实例。

于 2012-01-22T13:42:38.660 回答