您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Python中的getopt函数使用详解

2024/2/21 20:25:49发布33次查看
函数原型:
getopt.getopt(args, shortopts, longopts=[])
参数解释:
args:args为需要解析的参数列表。一般使用sys.argv[1:],这样可以过滤掉第一个参数(ps:第一个参数是脚本的名称,它不应该作为参数进行解析) shortopts:简写参数列表 longopts:长参数列表返回值:
opts:分析出的(option, value)列表对。 args:不属于格式信息的剩余命令行参数列表。源码分析
在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']
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product