python getopt详解及简单实例


Posted in Python onDecember 30, 2016

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
详谈Python高阶函数与函数装饰器(推荐)
Sep 30 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
TensorFlow 显存使用机制详解
Feb 03 Python
Python批量处理csv并保存过程解析
May 16 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
python使用torch随机初始化参数
Mar 22 Python
浅谈编码,解码,乱码的问题
Dec 30 #Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 #Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 #Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 #Python
python实现按任意键继续执行程序
Dec 30 #Python
详解python3实现的web端json通信协议
Dec 29 #Python
Python正则表达式如何进行字符串替换实例
Dec 28 #Python
You might like
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
如何实现浏览器上的右键菜单
2006/07/10 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
js同源策略详解
2015/05/21 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python解决鸡兔同笼问题的方法
2014/12/20 Python
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python调用C语言的实现
2019/07/26 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
市场部专员岗位职责
2013/11/30 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
店长岗位职责
2015/02/11 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
Golang 字符串的常见操作
2022/04/19 Golang