python getopt详解
函数原型:
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']
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Java Cache详解及简单实现,包括了Java Cache详解及简单实现的使用技巧和注意事项,需要的朋友参考一下 Java Cache详解及简单实现 概要: 最近在做spring的项目,想做一个缓存,访问数据库,定期来做数据更新 要实现两个功能 可以通过http请求来立刻刷新缓存 缓存可以通过自己配置的时间间隔来定期刷新 通过Controller来做 因为需要通过http来刷新
本文向大家介绍Android 中Seekbar详解及简单实例,包括了Android 中Seekbar详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 Android 中Seekbar详解及简单实例 做到音频播放和音乐播放时,大多数都要用到Seekbar。现在我先简单介绍下Seekbar的几个重要属性。 android:max 设置值的大小 . android:thumb=”@drawable
本文向大家介绍SQL GROUP BY 详解及简单实例,包括了SQL GROUP BY 详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 GROUP BY 语句用于结合 Aggregate 函数,根据一个或多个列对结果集进行分组。 SQL GROUP BY 语法 演示数据库 在本教程中,我们将使用众所周知的 Northwind 样本数据库。 下面是选自 "Orders" 表的数据: Or
本文向大家介绍Android 回调详解及简单实例,包括了Android 回调详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 Android 回调 前言: Android中的回调最经典的就是点击事件设置监听(一般通过switch(v.getId()))这里写个最基本的 view对外暴露了一个接口onClick 我们在用的时候实现具体方法写了处理时,当前的Actvity是没有对这个方法做
本文向大家介绍Android中SharedPreference详解及简单实例,包括了Android中SharedPreference详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 Android中SharedPreference详解 SharedPreference是Android提供的一种轻量级的数据存储方式,主要用来存储一些简单的配置信息,例如,默认欢迎语,登录用户名和密码等。
本文向大家介绍AngularJS 模块详解及简单实例,包括了AngularJS 模块详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 AngularJS 模块 模块定义了一个应用程序。 模块是应用程序中不同部分的容器。 模块是应用控制器的容器。 控制器通常属于一个模块。 创建模块 你可以通过 AngularJS 的 angular.module 函数来创建模块: "myApp" 参数对应执行