错误:"无法识别的参数:shell" - 用于Python的OAuth 2.0 Google API客户端

时间:2014-08-12 18:19:47

标签: python shell oauth-2.0 google-oauth google-api-python-client

我正在尝试进行纯服务器端身份验证。我已经按照google developers上提供的代码示例中提到的所有过程进行了操作。问题是execfile()在正常python shell中工作正常,但它会在python interactive shell中抛出下面提到的错误。

以下是语句的日志。还需要在playlistitems.py文件中定义其他内容,以便可以在 Python Interactive Shell 中执行。

playlistitems.py代码:Sample Code

Kshitij:trailers_backend Kshitij$ python manage.py shell
Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> execfile("playlistitems.py")
usage: manage.py [--auth_host_name AUTH_HOST_NAME] [--noauth_local_webserver]
                 [--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]]
                 [--logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
manage.py: error: unrecognized arguments: shell
Kshitij:trailers_backend Kshitij$ 

我通过更改tools.py本身的值来传递参数。以下是我得到的错误。我该如何解决?对于这种情况的端到端示例?

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/Kshitij/django project/trailers_backend/videoStore/getVideos.py", line 62, in getVideos
     credentials = run_flow(flow, storage, flags)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py", line 1260, in add_argument
    if not args or len(args) == 1 and args[0][0] not in chars:
TypeError: 'bool' object has no attribute '__getitem__'
>>> 

3 个答案:

答案 0 :(得分:3)

我终于在@Stormie的帮助下获得了工作代码。所以这是工作代码片段。

if credentials is None or credentials.invalid:
    flags = argparser.parse_args('--auth_host_name localhost --logging_level INFO'.split())
    credentials = run_flow(flow, storage, flags)

我刚刚了解了parse_args()。需要传递参数的parse_args() ArgumentParser方法。

如果您从命令行进行身份验证,并且您的浏览器不支持Javascript,则可能需要添加参数--noauth_local_webserver:

flags = argparser.parse_args('--auth_host_name localhost --logging_level INFO --noauth_local_webserver'.split())
        credentials = run_flow(flow, storage, flags)

答案 1 :(得分:3)

这对我有用 来自oauth2client导入工具 flags = tools.argparser.parse_args([]) 这促使我在浏览器中验证URL。希望这有帮助

答案 2 :(得分:0)

您需要从OAuth2Client tools传递run_flow()方法的参数。它表明当你调用run_flow()时,你必须解析以下参数:

run_flow(flow, storage, flags, http=None)

标志是你缺少的,你必须添加标志(在链接中描述):

--auth_host_name: Host name to use when running a local web server
    to handle redirects during OAuth authorization.
    (default: 'localhost')

--auth_host_port: Port to use when running a local web server to handle
    redirects during OAuth authorization.;
    repeat this option to specify a list of values
    (default: '[8080, 8090]')
    (an integer)

--[no]auth_local_webserver: Run a local web server to handle redirects
    during OAuth authorization.
    (default: 'true')

我仍然无法解析如何准确地解析它们,我目前有一个关于如何模仿验证会话here的旧run()方法的重要问题。