我写了一个Python实用程序脚本,使用optparse在脚本启动时包含选项和标志。
一切正常,但是当我导入Google API oauth2client并运行其execute函数时,它会覆盖我的add_options
到它使用的选项。
所谓“覆盖”,是指尽管我的脚本添加了选项到我的选项解析器中,但当我执行脚本时,如下所示:
./myscript --help
我得到了我添加到脚本中的选项的详细响应:
Usage: myscript [options]
Options:
-h, --help show this help message and exit
-u USER, --user=USER resources owned by this username
但是,当我像这样实际执行我的脚本时:
./myscript --user myuser
我遇到了以下错误:
usage: smyscript [-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}]
myscript: error: unrecognized arguments: --user myuser
另一个需要知道的重要事情是,我正在使用自己的模块来包装oauth2client,如下所示:
import oauth2client
import argparse
def execute():
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[tools.argparser])
# don't use any flags
flags = parser.parse_args(None)
flow = client.flow_from_clientsecrets(
client_secret_path,
scope=scope_path,
message=tools.message_if_missing(client_secret))
# open credential storage path
credential_storage = file.Storage(self._credential_storage_path)
credentials = credential_storage.get()
# get credentails if necessary
if credentials is None or credentials.invalid:
credentials = tools.run_flow(flow, credential_storage, flags)
然后我的脚本大概是这样的:
import myown_oauth2client_wrapper
from optparse import OptionParser
if __name__ == "__main__":
usage = "something"
parser_ = OptionParser(usage)
parser_.add_option("-u","--user")
(options_, args) = parser_.parse_args()
myown_oauth2client_wrapper.execute()
我该如何避免选项覆盖?
沙哈尔
add_option
已被覆盖,你觉得怎么样? - tdelaney