函数原型:
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如下:
复制代码 代码如下:argv = [\’-v\’, \’-p\’, \’out/host/linux-xxx\’, \’-k\’, \’build/target/product/security/testkey\’, \’out/target/product/xxx/obj/PACKAGING/target_files_intermediates/xxx-target_files.zip\’, \’out/target/product/xxx/xxx_20150723.1340-ota.zip\’]
首先,对参数进行分析,其中短参数包括:
-v,-p,-k,
经过解析后,生成的结果如下所示:
复制代码 代码如下:opts = [(\’-v\’, \’\’), (\’-p\’, \’out/host/linux-x86\’), (\’-k\’, \’build/target/product/security/testkey\’)]
args =[\’out/target/product/xxx/obj/PACKAGING/target_files_intermediates/xxx-target_files.zip\’, \’out/target/product/xxx/xxx_20150723.1340-ota.zip\’]