run_flow抱怨获得最少三个参数

时间:2014-10-20 11:27:19

标签: python-2.7 google-oauth google-api-python-client gmail-api

我正在编写一个简单的脚本来通过GMail API发送电子邮件,我发现访问其SMTP界面的旧脚本无效。

所以我使用他们quickstart page中的以下脚本开始阅读:

#! /usr/bin/env python
#

import httplib2

from apiclient.discovery import build
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import run

CLIENT_SECRET = '.client.json'
OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.readonly'
STORAGE = Storage('gmail.storage')

flow = flow_from_clientsecrets(CLIENT_SECRET, scope=OAUTH_SCOPE)
http = httplib2.Http()

credentials = STORAGE.get()
if credentials is None or credentials.invalid:
    credentials = run(flow, STORAGE, http=http)

http = credentials.authorize(http)

gmail_service = build('gmail', 'v1', http=http)
threads = gmail_service.users().threads().list(userId='me').execute()

if threads['threads']:
    for thread in threads['threads']:
        print 'Thread ID: %s' % (thread['id'])

运行此操作会产生NotImplementedError,如this question

所示

所以我导入并调用了run_flow而不是run,因为我没有安装gflags来继续。但是,我收到以下错误:

TypeError: run_flow() takes at least 3 arguments (3 given)

我从argparse应该帮助的链接问题中理解。我可以添加对该问题使用的parser的调用,但我不知道在命令行上传递什么参数。

任何人都可以成功实施一些可以提供帮助的东西吗?

1 个答案:

答案 0 :(得分:3)

使用run_flow python时,不需要将额外的参数传递给命令行。

import argparse
...
from oauth2client import tools
...
from oauth2client.tools import run_flow
...
parser = argparse.ArgumentParser(parents=[tools.argparser])
flags = parser.parse_args()
....
credentials = run_flow(flow, STORAGE, flags, http=http)

然后你可以运行

python quickstart.py