0

经过长时间的搜索,我发现这个 python 脚本可以满足我的需要,以便在收到新电子邮件时实时通知我的 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 回答 1

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()
于 2013-04-28T19:28:01.377 回答