时间:2021-07-01 10:21:17 帮助过:65人阅读
- getopt.getopt(args, shortopts, longopts=[])
参数解释:
返回值:
源码分析
在Android生成OTA的build系统中,common.py文件中的ParseOptions函数就是用来解析输入参数的,我们来通过该函数的实现来分析一下getopt的使用。
函数源码如下:
- def ParseOptions(argv, docstring, extra_opts="", extra_long_opts=(), extra_option_handler=None):
- try:
- opts, args = getopt.getopt(
- argv, "hvp:s:x" + extra_opts,
- ["help", "verbose", "path=", "signapk_path=", "extra_signapk_args=", "java_path=", "public_key_suffix=", "private_key_suffix=", "device_specific=", "extra="] + list(extra_long_opts))
- except getopt.GetoptError, err:
- Usage(docstring)
- print "**", str(err), "**"
- sys.exit(2)
- path_specified = False
- for o, a in opts:
- if o in ("-h", "--help"):
- Usage(docstring)
- sys.exit()
- elif o in ("-v", "--verbose"):
- OPTIONS.verbose = True
- elif o in ("-p", "--path"):
- OPTIONS.search_path = a
- elif o in ("--signapk_path",):
- OPTIONS.signapk_path = a
- elif o in ("--extra_singapk_args",):
- OPTIONS.extra_signapk_args = shlex.split(a)
- elif o in ("--java_path",):
- OPTIONS.java_path = a
- else:
- if extra_option_handler is None or not extra_option_handler(o, a):
- assert False, "unknown option \"%s\"" % (o,)
- os.environ["PATH"] = (os.path.join(OPTIONS.search_path, "bin") + os.pathsep + os.environ["PATH"])
- return args
其中,extra_option_handler可以理解为函数指针,它的功能也是解析opts的键值对。
extra_option_handler源码如下:
- def option_handler(o, a):
- if o in ("-b", "--board_config"):
- pass # deprecated
- elif o in ("-k", "--package_key"):
- OPTIONS.package_key = a
- elif o in ("-i", "--incremental_from"):
- OPTIONS.incremental_source = a
- elif o in ("-w", "--wipe_user_data"):
- OPTIONS.wipe_user_data = True
- elif o in ("-n", "--no_prereq"):
- OPTIONS.omit_prereq = True
- elif o in ("-e", "--extra_script"):
- OPTIONS.extra_script = a
- elif o in ("-a", "--aslr_mode"):
- if a in ("on", "On", "true", "True", "yes", "Yes"):
- OPTIONS.aslr_mode = True
- else:
- OPTIONS.aslr_mode = False
- elif o in ("--worker_threads"):
- OPTIONS.worker_threads = int(a)
- else:
- return False
- return True
一般生成OAT全量包的参数argv如下:
- -v,-p,-k,
经过解析后,生成的结果如下所示: