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的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
Django Rest framework之认证的实现代码
Dec 17 Python
python logging设置level失败的解决方法
Feb 19 Python
python环境下安装opencv库的方法
Mar 05 Python
利用Python如何实时检测自身内存占用
May 09 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Python jiaba库的使用详解
Nov 23 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
咖啡的化学
2021/03/03 咖啡文化
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
看了就知道什么是JSON
2007/12/09 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
Python中DJANGO简单测试实例
2015/05/11 Python
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python3中for循环踩过的坑记录
2020/12/14 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
钳工实训报告总结
2014/11/04 职场文书
承诺保证书格式
2015/02/28 职场文书
保送生自荐信范文
2015/03/26 职场文书
酒店前台岗位职责
2015/04/16 职场文书
Pytest中conftest.py的用法
2021/06/27 Python
nginx常用配置conf的示例代码详解
2022/03/21 Servers