Python中的getopt函數(shù)使用詳解
函數(shù)原型:
getopt.getopt(args, shortopts, longopts=[])
參數(shù)解釋:
- args:args為需要解析的參數(shù)列表。一般使用sys.argv[1:],這樣可以過濾掉第一個(gè)參數(shù)(ps:第一個(gè)參數(shù)是腳本的名稱,它不應(yīng)該作為參數(shù)進(jìn)行解析)
- shortopts:簡寫參數(shù)列表
- longopts:長參數(shù)列表
返回值:
- opts:分析出的(option, value)列表對。
- args:不屬于格式信息的剩余命令行參數(shù)列表。
源碼分析
在Android生成OTA的build系統(tǒng)中,common.py文件中的ParseOptions函數(shù)就是用來解析輸入?yún)?shù)的,我們來通過該函數(shù)的實(shí)現(xiàn)來分析一下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的鍵值對。
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如下:
首先,對參數(shù)進(jìn)行分析,其中短參數(shù)包括:
-v,-p,-k,
經(jīng)過解析后,生成的結(jié)果如下所示:
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高手之路python處理excel文件(方法匯總)
用python來自動生成excel數(shù)據(jù)文件。python處理excel文件主要是第三方模塊庫xlrd、xlwt、xluntils和pyExcelerator,除此之外,python處理excel還可以用win32com和openpyxl模塊2016-01-01
用Python編寫簡單的gRPC服務(wù)的詳細(xì)過程
gRPC 是可以在任何環(huán)境中運(yùn)行的現(xiàn)代開源高性能 RPC 框架。接下來通過本文給大家介紹用Python編寫簡單的gRPC服務(wù)的詳細(xì)過程,感興趣的朋友一起看看吧2021-07-07
Python Django view 兩種return的實(shí)現(xiàn)方式
這篇文章主要介紹了Python Django view 兩種return的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
基于OpenCV4.2實(shí)現(xiàn)單目標(biāo)跟蹤
這篇文章主要介紹了如何和何時(shí)使用OpenCV 4.2中可用的8種不同的跟蹤器- BOOSTING, MIL, KCF, TLD, MEDIANFLOW, GOTURN, MOSSE和CSRT,并用他們實(shí)現(xiàn)單目標(biāo)跟蹤,需要的可以參考一下2022-03-03
Python利用tkinter和socket實(shí)現(xiàn)端口掃描
這篇文章主要為大家詳細(xì)介紹了Python如何利用tkinter和socket實(shí)現(xiàn)端口掃描功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-12-12
Python實(shí)現(xiàn)獲取彈幕的兩種方式分享
彈幕可以給觀眾一種“實(shí)時(shí)互動”的錯(cuò)覺,在相同時(shí)刻發(fā)送的彈幕基本上也具有相同的主題,在參與評論時(shí)就會有與其他觀眾同時(shí)評論的錯(cuò)覺。本文為大家總結(jié)了兩個(gè)Python獲取彈幕的方法,希望對大家有所幫助2023-03-03
python 根據(jù)excel中顏色區(qū)分讀取的操作
這篇文章主要介紹了python 根據(jù)excel中顏色區(qū)分讀取的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python2和3字符編碼的區(qū)別知識點(diǎn)整理
在本篇文章中小編給各位分享的是關(guān)于Python2和3字符編碼的區(qū)別知識點(diǎn),有需要的朋友們可以學(xué)習(xí)下。2019-08-08

