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发腾讯微博代码分享
Jan 10 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
Python Django Cookie 简单用法解析
Aug 13 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
详解Python中namedtuple的使用
Apr 27 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 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编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
PHP小教程之实现链表
2014/06/09 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
python中的变量如何开辟内存
2018/06/26 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
怎么写好自荐信
2013/10/30 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers