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中关于中文编码问题的处理建议
Apr 08 Python
Python字典操作简明总结
Apr 13 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
Python3分析处理声音数据的例子
Aug 27 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
python学习将数据写入文件并保存方法
Jun 07 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 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 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
Python subprocess模块常见用法分析
2018/06/12 Python
python实现汽车管理系统
2018/11/30 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
浅谈python出错时traceback的解读
2020/07/15 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
英语教师求职信
2014/06/16 职场文书
上班迟到检讨书
2014/09/15 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
法制主题班会教案
2015/08/13 职场文书
HTML中的表单元素介绍
2022/02/28 HTML / CSS
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫