Python編寫帶選項(xiàng)的命令行程序方法
運(yùn)行python程序時(shí),有時(shí)需要在命令行傳入一些參數(shù)。常見(jiàn)的方式是在執(zhí)行時(shí),在腳本名后直接追加空格分隔的參數(shù)列表(例如 python test.py arg0 arg1 arg2),然后在腳本中就可以通過(guò)sys.argv獲取所有的命令行參數(shù)。
這種方式的優(yōu)點(diǎn)是傳參方便,參數(shù)獲取簡(jiǎn)單;缺點(diǎn)是執(zhí)行腳本時(shí),必須知道參數(shù)的順序,并且不能設(shè)置默認(rèn)值,所有參數(shù)每次都必須傳入。
還有一種命令行傳參方式是通過(guò)帶選項(xiàng)的方式進(jìn)行傳參(例如python test.py -p0=arg0 -p1=arg1)。
這種方式的優(yōu)點(diǎn)是參數(shù)不用按照固定的順序傳入,并且對(duì)于有默認(rèn)值的參數(shù),可以不傳參數(shù)直接使用默認(rèn)值;缺點(diǎn)是傳入?yún)?shù)時(shí)需要額外加上選項(xiàng)。
對(duì)于帶選項(xiàng)的命令行參數(shù),可以通過(guò)python自帶的getopt模塊來(lái)進(jìn)行解析。
主要方法:
getopt(args, shortopts, longopts = []):解析命令行選項(xiàng)和參數(shù)列表。
args是不包括運(yùn)行程序引用的參數(shù)列表,通常來(lái)說(shuō)就是sys.args[1:]。
shortopts是腳本要識(shí)別的短選項(xiàng)字母,如果短選項(xiàng)需要參數(shù),需要在字母后加冒號(hào)“:”。
longopts是支持的長(zhǎng)選項(xiàng),是一個(gè)長(zhǎng)選項(xiàng)名稱的列表。選項(xiàng)名稱不包括“-”。需要參數(shù)的長(zhǎng)選項(xiàng),需要在后面加一個(gè)等號(hào)“=”。
返回值包括兩個(gè)列表:第一個(gè)列表中是(選項(xiàng),值),如果選項(xiàng)沒(méi)有參數(shù),值為空字符串。第二個(gè)列表是剝離選項(xiàng)之后的程序參數(shù)列表。長(zhǎng)項(xiàng)前用“--”,短項(xiàng)前用“-”。
另外要注意的是當(dāng)進(jìn)行命令行參數(shù)解析時(shí),如果遇到了非選項(xiàng)的參數(shù)時(shí),就會(huì)停止帶選項(xiàng)參數(shù)的解析。
簡(jiǎn)單示例
#!/usr/bin/python # -*- coding: gbk -*- import sys import getopt def printUsage(): print ('''usage: test.py -i <input> -o <output> test.py --in=<input> --out=<output>''') def main(): inputarg="" outputarg="" try: opts, args = getopt.getopt(sys.argv[1:],"hi:o:",["in=","out="]) except getopt.GetoptError: printUsage() sys.exit(-1) for opt,arg in opts: if opt == '-h': printUsage() elif opt in ("-i", "--in"): inputarg=arg elif opt in ("-o","--out"): outputarg=arg print ('輸入:'+inputarg) print ('輸出:'+outputarg) print ('其他程序參數(shù):'+",".join(args)) if __name__=="__main__": main()
以上這篇Python編寫帶選項(xiàng)的命令行程序方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python利用psutil獲取CPU與內(nèi)存等硬件信息
psutil是Python的一個(gè)第三方庫(kù),提供了各種強(qiáng)大的硬件信息查閱功能,這篇文章主要為大家介紹了如何利用psutil獲取CPU與內(nèi)存等硬件信息,需要的可以參考一下2023-07-07深入學(xué)習(xí)python的yield和generator
這篇文章主要為大家詳細(xì)介紹了python的yield和generator,針對(duì)python的生成器和yield關(guān)鍵字進(jìn)行深入學(xué)習(xí),感興趣的小伙伴們可以參考一下2016-03-03pandas如何統(tǒng)計(jì)某一列或某一行的缺失值數(shù)目
這篇文章主要介紹了pandas如何統(tǒng)計(jì)某一列或某一行的缺失值數(shù)目,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05python 爬蟲(chóng)之selenium可視化爬蟲(chóng)的實(shí)現(xiàn)
這篇文章主要介紹了python 爬蟲(chóng)之selenium可視化爬蟲(chóng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Python3自動(dòng)生成MySQL數(shù)據(jù)字典的markdown文本的實(shí)現(xiàn)
這篇文章主要介紹了Python3自動(dòng)生成MySQL數(shù)據(jù)字典的markdown文本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05pytorch實(shí)現(xiàn)用Resnet提取特征并保存為txt文件的方法
今天小編大家分享一篇pytorch實(shí)現(xiàn)用Resnet提取特征并保存為txt文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08python列表中remove()函數(shù)的使用方法詳解
這篇文章主要給大家介紹了關(guān)于python列表中remove()函數(shù)的使用,以及Python列表的remove方法的注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12Python 26進(jìn)制計(jì)算實(shí)現(xiàn)方法
這篇文章主要介紹了Python 26進(jìn)制計(jì)算實(shí)現(xiàn)方法,涉及Python字符串與數(shù)值計(jì)算的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05python實(shí)現(xiàn)的AES雙向?qū)ΨQ加密解密與用法分析
這篇文章主要介紹了python實(shí)現(xiàn)的AES雙向?qū)ΨQ加密解密與用法,簡(jiǎn)單分析了AES加密解密算法的基本概念并結(jié)合實(shí)例形式給出了AES加密解密算法的相關(guān)實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下2017-05-05