Verwenden von Argparse mit Google Admin API

Ich benutze die Python-API von Google, um Audit-Informationen herunterzuladen, aber ich kann die Argumente der übergeordneten Gruppe nicht für argparse (die für den API-Zugriff erforderlich erscheinen) und meine eigenen Argumente (zB das Übergeben eines Datums), um zusammenzuarbeiten.

Code:

import pprint import sys import re import httplib2 import json import collections import argparse from oauth2client import client from apiclient import sample_tools from apiclient import discovery from oauth2client.client import AccessTokenRefreshError from oauth2client.client import OAuth2WebServerFlow from oauth2client.file import Storage from oauth2client.tools import run from oauth2client import tools def main(argv): # Parser for command-line arguments. parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser]) parser.add_argument("-d","--selected_date", help="Date (YYYY-mm-dd) to run user usage report", required=True) args = parser.parse_args(argv[1:]) print args selected_date = args.selected_date print selected_date # Authenticate and construct service. service, flags = sample_tools.init( argv, 'admin', 'reports_v1', __doc__, __file__, scope='https://www.googleapis.com/auth/admin.reports.usage.readonly') # If the Credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # Credentials will get written back to a file. storage = Storage('admin.dat') credentials = storage.get() if not credentials or credentials.invalid: credentials = run(FLOW, storage) 

Und läuft es von der Kommandozeile …

 > python user_report.py usage: user_report.py [-h] [--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}] -d SELECTED_DATE user_report.py: error: argument -d/--selected_date is required 

Schaut gut so weit … jetzt fügen Sie ein Argument

 > python user_report.py -d "2014-09-14" Namespace(auth_host_name='localhost', auth_host_port=[8080, 8090], logging_level='ERROR', noauth_local_webserver=False, selected_date='2014-09-14') usage: user_report.py [-h] [--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}] user_report.py: error: unrecognized arguments: -d 2014-09-14 

Es scheint, dass das Datumsargument nicht erkannt wird. Jede Hilfe wäre sehr geschätzt!

    2 Solutions collect form web for “Verwenden von Argparse mit Google Admin API”

    Ich habe es jetzt funktioniert – sample_tools.init ist Instanziating (für besser oder schlechter) seine eigene argparse Instanz. Die Google API ermöglicht es Ihnen, in einem Elternteil (wo ich in meine eigenen benutzerdefinierten Argumente bestanden) und alles ist funktioniert.

    https://google-api-python-client.googlecode.com/hg/docs/epy/apiclient.sample_tools-pysrc.html

     # Parser for command-line arguments parent = argparse.ArgumentParser(add_help=False) group = parent.add_argument_group('standard') parent.add_argument("-d","--selected_date", help="Date (YYYY-mm-dd) to run user usage report", required=True) flags = parser.parse_args(argv[1:]) print flags selected_date = flags.selected_date print selected_date # Authenticate and construct service. service, flags = sample_tools.init( argv, 'admin', 'reports_v1', __doc__, __file__, scope='https://www.googleapis.com/auth/admin.reports.usage.readonly', parents=[parent]) 

    Das zusätzliche Argument für sample_tools.init (Übergeben des übergeordneten) behebt das Problem

    Es sieht mir wie folgt aus:

     args = parser.parse_args(argv[1:]) # runs fine print args # produces the Namespace line selected_date = args.selected_date print selected_date # where is this output? # Authenticate and construct service. service, flags = sample_tools.init(...) # is this producing the error? 

    Ich sample_tools.init , dass die tools.argparser wird von sample_tools.init und produziert den Fehler, weil es nicht wissen, über die -d Argument.

    (Ich bin vertraut mit argparse, aber nicht diese API).

    Python ist die beste Programmiersprache der Welt.