python mbox 解锁无效
python mbox unlock not working
我正在使用此脚本从收件箱中删除邮件。
if(not debug):
logging.debug("removing messages")
all_mail.lock()
for message in all_mail:
all_mail.remove(message)
all_mail.flush()
all_mail.unlock()
all_mail.close()
在运行这个脚本执行一次后,我注意到在/var/spool/mail
中还有一个锁定文件。如果我再次尝试 运行 脚本,我会得到一个相当可预测的异常:mailbox.ExternalClashError: dot lock unavailable
所以 all_mail.unlock() 似乎不起作用,但我不确定还可以做什么。
您的脚本应该在 all_mail.remove(message)
处引发异常,因为它永远不会到达 unlock
调用。 mbox
与普通字典的重要区别,这是你的问题:
The default Mailbox iterator iterates over message representations, not keys as the default dictionary iterator does.
这意味着 for message in all_mail:
使 msg
包含 mboxMessage
而不是键,并且 remove
引发 KeyError
异常。
修复很简单:
for message in all_mail.iterkeys():
all_mail.remove(message)
我正在使用此脚本从收件箱中删除邮件。
if(not debug):
logging.debug("removing messages")
all_mail.lock()
for message in all_mail:
all_mail.remove(message)
all_mail.flush()
all_mail.unlock()
all_mail.close()
在运行这个脚本执行一次后,我注意到在/var/spool/mail
中还有一个锁定文件。如果我再次尝试 运行 脚本,我会得到一个相当可预测的异常:mailbox.ExternalClashError: dot lock unavailable
所以 all_mail.unlock() 似乎不起作用,但我不确定还可以做什么。
您的脚本应该在 all_mail.remove(message)
处引发异常,因为它永远不会到达 unlock
调用。 mbox
与普通字典的重要区别,这是你的问题:
The default Mailbox iterator iterates over message representations, not keys as the default dictionary iterator does.
这意味着 for message in all_mail:
使 msg
包含 mboxMessage
而不是键,并且 remove
引发 KeyError
异常。
修复很简单:
for message in all_mail.iterkeys():
all_mail.remove(message)