欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的getopt函數(shù)使用詳解

 更新時(shí)間:2015年07月28日 12:08:20   作者:低調(diào)小一  
這篇文章主要介紹了Python中的getopt函數(shù)使用詳解,是Python進(jìn)階學(xué)習(xí)中的重要知識(shí),需要的朋友可以參考下

函數(shù)原型:

getopt.getopt(args, shortopts, longopts=[])


參數(shù)解釋?zhuān)?/strong>

  •     args:args為需要解析的參數(shù)列表。一般使用sys.argv[1:],這樣可以過(guò)濾掉第一個(gè)參數(shù)(ps:第一個(gè)參數(shù)是腳本的名稱(chēng),它不應(yīng)該作為參數(shù)進(jìn)行解析)
  •     shortopts:簡(jiǎn)寫(xiě)參數(shù)列表
  •     longopts:長(zhǎng)參數(shù)列表

返回值:

  •     opts:分析出的(option, value)列表對(duì)。
  •     args:不屬于格式信息的剩余命令行參數(shù)列表。

源碼分析

在Android生成OTA的build系統(tǒng)中,common.py文件中的ParseOptions函數(shù)就是用來(lái)解析輸入?yún)?shù)的,我們來(lái)通過(guò)該函數(shù)的實(shí)現(xiàn)來(lái)分析一下getopt的使用。

函數(shù)源碼如下:

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可以理解為函數(shù)指針,它的功能也是解析opts的鍵值對(duì)。
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全量包的參數(shù)argv如下:

復(fù)制代碼 代碼如下:
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']


首先,對(duì)參數(shù)進(jìn)行分析,其中短參數(shù)包括:
-v,-p,-k,


經(jīng)過(guò)解析后,生成的結(jié)果如下所示:

復(fù)制代碼 代碼如下:
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']

相關(guān)文章

  • Python中的推導(dǎo)式使用詳解

    Python中的推導(dǎo)式使用詳解

    這篇文章主要介紹了Python中的推導(dǎo)式使用詳解,本文分別講解了列表推導(dǎo)式、字典推導(dǎo)式、集合推導(dǎo)式使用實(shí)例,需要的朋友可以參考下
    2015-06-06
  • Python類(lèi)的定義繼承調(diào)用比較方法技巧

    Python類(lèi)的定義繼承調(diào)用比較方法技巧

    這篇文章主要介紹了Python類(lèi)的定義繼承調(diào)用比較方法技巧,文章首先通過(guò)類(lèi)的約束展開(kāi)詳情圍繞主題介紹相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • Python詞法結(jié)構(gòu)

    Python詞法結(jié)構(gòu)

    這篇文章主要介紹了Python詞法結(jié)構(gòu),變量是一種存儲(chǔ)數(shù)據(jù)的載體,也就是一個(gè)容器。計(jì)算機(jī)中的變量是實(shí)際存在的數(shù)據(jù)或者說(shuō)是存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)的一塊內(nèi)存空間,變量的值可以被讀取和修改,這是所有計(jì)算機(jī)和控制的基礎(chǔ),下面詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • 用pandas劃分?jǐn)?shù)據(jù)集實(shí)現(xiàn)訓(xùn)練集和測(cè)試集

    用pandas劃分?jǐn)?shù)據(jù)集實(shí)現(xiàn)訓(xùn)練集和測(cè)試集

    這篇文章主要介紹了用pandas劃分?jǐn)?shù)據(jù)集實(shí)現(xiàn)訓(xùn)練集和測(cè)試集,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python利用for循環(huán)打印星號(hào)三角形的案例

    Python利用for循環(huán)打印星號(hào)三角形的案例

    這篇文章主要介紹了Python利用for循環(huán)打印星號(hào)三角形的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python實(shí)現(xiàn)批量修改服務(wù)器密碼的方法

    python實(shí)現(xiàn)批量修改服務(wù)器密碼的方法

    這篇文章主要介紹了python實(shí)現(xiàn)批量修改服務(wù)器密碼的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • Python信息抽取之亂碼解決辦法

    Python信息抽取之亂碼解決辦法

    這篇文章主要介紹了Python信息抽取之亂碼解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • PyQt5 控件字體樣式等設(shè)置的實(shí)現(xiàn)

    PyQt5 控件字體樣式等設(shè)置的實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5 控件字體樣式等設(shè)置的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • python畫(huà)折線圖的程序

    python畫(huà)折線圖的程序

    這篇文章主要為大家詳細(xì)介紹了python畫(huà)折線圖的方法,一個(gè)畫(huà)折線圖的程序具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python清除字符串前后空格函數(shù)的方法

    python清除字符串前后空格函數(shù)的方法

    今天小編就為大家分享一篇python清除字符串前后空格函數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10

最新評(píng)論