찾다
백엔드 개발파이썬 튜토리얼Python中的getopt函数使用详解

函数原型:

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']

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구