使用函数从电子邮件中获取链接,如何有效地轮询此功能?

时间:2014-08-20 13:00:42

标签: python python-2.7 while-loop polling gmail-api

我已经在Python中创建了一个函数(通过GMail API)会找到一封发送到特定电子邮件地址(gmail别名)的电子邮件,其中包含某个主题行,然后从邮件中提取信息。

此函数只有在成功时才会返回,并返回一个字符串。我有3个错误捕获语句,例如。

try:
    gmail_service.users().messages().trash(userId='me', id=message['id']).execute() 
    print 'Message with id: %s trashed successfully.' % message['id']
except errors.HttpError, error:
    print 'Could not trash ' + message['id'] + ': %s' % error

我的民意调查代码是:

def check_Mail(self, recipient="", loopfor=0):
    print("Loop start! loopfor = " + str(loopfor))
    while loopfor > 1:
        if get_Mail(recipient) is None:
            loopfor -= 5
            print(str(loopfor) + " seconds left in loop")
            time.sleep(5)
        else:
            print("Woot, we have mail!")
            loopfor = 0
            print(get_Mail(recipient))
            #return get_Mail(recipient)

我这样称呼check_Mailcheck_Mail("mymail@gmail.com", 30),但此方法的结果是输出Loop start! loopfor = 0,而不是其他任何内容。

为什么我的int0传递?

2 个答案:

答案 0 :(得分:2)

在您的电话中,您的问题并不令人惊讶:

  

我这样调用check_Mail:check_Mail(“mymail@gmail.com”,30)

这里传递两个参数,但是你的函数签名有三个参数:

def check_Mail(self, recipient="", loopfor=0)

所发生的事情是mymail@gmail.com被分配到self30分配给recipient

    check_Mail("mymail@gmail.com", 30)
                |        ----------^
                V        V
def check_Mail(self, recipient="", loopfor=0)

如果此方法不是类的一部分,请从其定义中删除self参数。如果它是类的一部分,则需要传递一个类实例,因此obj.check_Mail('mymail@gmail.com', 30)checkMail(obj, 'mymail@gmail.com', 30)

答案 1 :(得分:2)

我猜是self这是一个类方法。类方法需要self方法,因此在调用类时,类的实例会隐式传递给方法。如果你在一个类之外调用这个方法(例如,用于测试),你的参数将按顺序进行。所以电子邮件地址是self,整数30是“