激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python中的getopt函數使用詳解

Python中的getopt函數使用詳解

2020-07-27 11:05低調小一 Python

這篇文章主要介紹了Python中的getopt函數使用詳解,是Python進階學習中的重要知識,需要的朋友可以參考下

函數原型:

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人毛片网 | 国产资源在线免费观看 | 成人视屏在线 | 美女黄网站免费观看 | 久久久国产精品免费观看 | 操碰 | sese在线视频| 九九色在线观看 | a视频在线播放 | 草b视频在线观看 | 黄色网址免费在线播放 | 久久草在线观看视频 | 人人看人人艹 | 成人毛片视频免费看 | 在线中文字幕不卡 | 精品999www| 欧美一级色片 | 国产精品成人免费一区久久羞羞 | 免费小毛片 | 国产精品免费一区二区三区四区 | 日韩一级免费毛片 | 国产成人羞羞视频在线 | 成av在线 | jj视频在线播放 | 黄色毛片a级 | 国产精品成人一区二区三区电影毛片 | 经典三级在线视频 | 欧洲伊人网 | wankz100%videos | 成年人福利视频 | 青青草免费观看 | 精国品产一区二区三区有限公司 | 欧美一级淫片007 | 午夜精品福利在线观看 | 欧美性生活xxxxx | 午夜激情视频免费 | 午夜精品久久久久久久爽 | 亚洲天堂第一页 | 免费在线观看成人av | 日本欧美一区 | 精品一区二区电影 |