对Gmail通知脚本的更改

时间:2013-04-28 16:51:33

标签: python python-2.7 python-3.x

经过长时间的搜索后,我发现this python script可以满足我的需要,以便在收到新电子邮件时获得实时通知我的iOS应用。我通常用Objective-c写,这是我第一次处理Python。在我尝试设置和运行脚本之前,我想更好地理解它。

这是我不确定的部分:

# Because this is just an example, exit after 8 hours
time.sleep(8*60*60)

#finally:
# Clean up.
idler.stop()
idler.join()
M.close()
# This is important!
M.logout()

我的问题:

  1. 我应该发表评论time.sleep(8*60*60)如果我想始终保持连接有效吗?

  2. 清理部分有什么用?如果我想保持连接,是否需要它?

  3. 为什么M.logout()很重要?

  4. 包含以上所有内容的主要问题是我需要对此脚本进行哪些更改(如果有)以使其在不停止或超时的情况下运行。

    由于

1 个答案:

答案 0 :(得分:1)

脚本已启动另一个线程,实际工作在另一个线程中完成。 由于某种原因,主线程没有任何事情要做,这就是为什么作者已经把time.sleep(8 * 60 * 60)占用了一段时间。

如果您想始终保持联系有效,则需要取消注释try: / finally:,请参阅下面的内容。

如果您是python的新手,请注意缩进用于定义代码块。如果您不打算停止程序,清理部分可能实际上没用,但是使用try: / finally:即使您使用Ctrl + C停止程序,也会执行清理代码。

未经测试:

# Had to do this stuff in a try-finally, since some testing 
# went a little wrong.....
try:
    # Set the following two lines to your creds and server
    M = imaplib2.IMAP4_SSL("imap.gmail.com")
    M.login(USER, PASSWORD)
    # We need to get out of the AUTH state, so we just select 
    # the INBOX.
    M.select("INBOX")
    numUnseen = getUnseen()
    sendPushNotification(numUnseen)

    #print M.status("INBOX", '(UNSEEN)')
    # Start the Idler thread
    idler = Idler(M)
    idler.start()

    # Sleep forever, one minute at a time
    while True:
        time.sleep(60)

finally:
    # Clean up.
    idler.stop()
    idler.join()
    M.close()
    # This is important!
    M.logout()