This article mainly introduces pythongetopt and simple instance-related information. For more information, see this article, for more information, see
Python getopt
Function prototype:
getopt.getopt(args, shortopts, longopts=[])
Parameter description:
Args: args is the list of parameters to be parsed. Sys. argv [1:] is generally used to filter out the first parameter (ps: The first parameter is the script name and should not be parsed as a parameter)
Shortopts: Abbreviated parameter list
Longopts: long parameter list
Return value:
Opts: the analyzed (option, value) List pair.
Args: list of remaining command line parameters that do not belong to the format information.
Source Code Analysis
In the OTA build system generated by Android, the ParseOptions function in the common. py file is used to parse the input parameters. we can use this function to analyze the usage of getopt.
The function source code is as follows:
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
Specifically, extra_option_handler can be understood as a function pointer, and its function is also to parse opts key-value pairs.
The source code of extra_option_handler is as follows:
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
The parameters argv for generating an OAT full package are as follows:
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']
First, analyze the parameters. The short parameters include:
-v,-p,-k,
After resolution, the generated results are as follows:
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']
Thank you for reading this article. I hope it will help you. thank you for your support for this site!
For more details about python getopt and related articles on simple instances, refer to the PHP Chinese network!