经过长时间的搜索后,我发现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()
我的问题:
我应该发表评论time.sleep(8*60*60)
如果我想始终保持连接有效吗?
清理部分有什么用?如果我想保持连接,是否需要它?
为什么M.logout()
很重要?
包含以上所有内容的主要问题是我需要对此脚本进行哪些更改(如果有)以使其在不停止或超时的情况下运行。
由于
答案 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()