getopt函數(shù)

在運(yùn)行程序時(shí)煎楣,可能需要根據(jù)不同的條件既峡,輸入不同的命令行選項(xiàng)來實(shí)現(xiàn)不同的功能守问。目前有短選項(xiàng)和長(zhǎng)選項(xiàng)兩種格式匀归。短選項(xiàng)格式為"-"加上單個(gè)字母選項(xiàng);長(zhǎng)選項(xiàng)為"--"加上一個(gè)單詞耗帕。長(zhǎng)格式是在Linux下引入的穆端。許多Linux程序都支持這兩種格式。在Python中提供了getopt模塊很好的實(shí)現(xiàn)了對(duì)這兩種用法的支持仿便,而且使用簡(jiǎn)單体啰。

取得命令行參數(shù)
  在使用之前,首先要取得命令行參數(shù)嗽仪。使用sys模塊可以得到命令行參數(shù)荒勇。
import sys
print sys.argv
然后在命令行下敲入任意的參數(shù),如:
python get.py -o t --help cmd file1 file2

結(jié)果為:
['get.py', '-o', 't', '--help', 'cmd', 'file1', 'file2']

可見闻坚,所有命令行參數(shù)以空格為分隔符沽翔,都保存在了sys.argv列表中。其中第1個(gè)為腳本的文件名窿凤。

選項(xiàng)的寫法要求
  對(duì)于短格式仅偎,"-"號(hào)后面要緊跟一個(gè)選項(xiàng)字母。如果還有此選項(xiàng)的附加參數(shù)卷玉,可以用空格分開哨颂,也可以不分開。長(zhǎng)度任意相种,可以用引號(hào)威恼。如以下是正確的:
-o
-oa
-obbbb
-o bbbb
-o "a b"
  對(duì)于長(zhǎng)格式品姓,"--"號(hào)后面要跟一個(gè)單詞。如果還有些選項(xiàng)的附加參數(shù)箫措,后面要緊跟"="腹备,再加上參數(shù)。"="號(hào)前后不能有空格斤蔓。如以下是正確的:

--help=file1

而這些是不正確的:
--help =file1
--help = file1
--help= file1

如何用getopt進(jìn)行分析
  使用getopt模塊分析命令行參數(shù)大體上分為三個(gè)步驟:

1.導(dǎo)入getopt, sys模塊
2.分析命令行參數(shù)
3.處理結(jié)果

例如模塊test1.py:
import getopt, sys

opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])#"ho:"也可以寫成'-h-o:'
print(opts)

print(args)

  1. 處理所使用的函數(shù)叫g(shù)etopt()植酥,因?yàn)槭侵苯邮褂胕mport導(dǎo)入的getopt模塊,所以要加上限定getopt才可以弦牡。
  2. 使用sys.argv[1:]過濾掉第一個(gè)參數(shù)(它是執(zhí)行腳本的名字友驮,不應(yīng)算作參數(shù)的一部分)。
  3. 使用短格式分析串"ho:"驾锰。當(dāng)一個(gè)選項(xiàng)只是表示開關(guān)狀態(tài)時(shí)卸留,即后面不帶附加參數(shù)時(shí),在分析串中寫入選項(xiàng)字符椭豫。當(dāng)選項(xiàng)后面是帶一個(gè)附加參數(shù)時(shí)耻瑟,在分析串中寫入選項(xiàng)字符同時(shí)后面加一個(gè)":"號(hào)。所以"ho:"就表示"h"是一個(gè)開關(guān)選項(xiàng)赏酥;"o:"則表示后面應(yīng)該帶一個(gè)參數(shù)喳整。
  4. 使用長(zhǎng)格式分析串列表:["help", "output="]。長(zhǎng)格式串也可以有開關(guān)狀態(tài)裸扶,即后面不跟"="號(hào)框都。如果跟一個(gè)等號(hào)則表示后面還應(yīng)有一個(gè)參數(shù)。這個(gè)長(zhǎng)格式表示"help"是一個(gè)開關(guān)選項(xiàng)姓言;"output="則表示后面應(yīng)該帶一個(gè)參數(shù)瞬项。
  5. 調(diào)用getopt函數(shù)。函數(shù)返回兩個(gè)列表:opts和args何荚。opts為分析出的格式信息囱淋。args為不屬于格式信息的剩余的命令行參數(shù),即不是按照getopt()里面定義的長(zhǎng)或短選項(xiàng)字符和附加參數(shù)以外的信息。opts是一個(gè)兩元組的列表餐塘。每個(gè)元素為:(選項(xiàng)串,附加參數(shù))妥衣。如果沒有附加參數(shù)則為空串''。
  6. 整個(gè)過程使用異常來包含戒傻,這樣當(dāng)分析出錯(cuò)時(shí)税手,就可以打印出使用信息來通知用戶如何使用這個(gè)程序。

用上面解釋的一個(gè)命令行例子運(yùn)行:

python test1.py '-h -o file --help --output=out file1 file2'

opts的輸出結(jié)果為:
[('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

而args則為:['file1', 'file2']需纳,這就是上面不屬于格式信息的剩余的命令行參數(shù)芦倒。

對(duì)于上面例子再增加如下代碼,主要是對(duì)分析出的參數(shù)進(jìn)行判斷是否存在不翩,然后再進(jìn)一步處理兵扬。主要的處理模式為:
for o, a in opts:
if o in ("-h", "--help"):
usage()
sys.exit()
if o in ("-o", "--output"):
output = a

使用一個(gè)循環(huán)麻裳,每次從opts中取出一個(gè)兩元組,賦給兩個(gè)變量器钟。o保存選項(xiàng)參數(shù)津坑,a為附加參數(shù)。接著對(duì)取出的選項(xiàng)參數(shù)進(jìn)行處理傲霸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疆瑰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子昙啄,更是在濱河造成了極大的恐慌穆役,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跟衅,死亡現(xiàn)場(chǎng)離奇詭異孵睬,居然都是意外死亡播歼,警方通過查閱死者的電腦和手機(jī)伶跷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秘狞,“玉大人叭莫,你說我怎么就攤上這事∷甘裕” “怎么了雇初?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)减响。 經(jīng)常有香客問我靖诗,道長(zhǎng),這世上最難降的妖魔是什么支示? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任刊橘,我火速辦了婚禮,結(jié)果婚禮上颂鸿,老公的妹妹穿的比我還像新娘促绵。我一直安慰自己,他們只是感情好嘴纺,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布败晴。 她就那樣靜靜地躺著,像睡著了一般栽渴。 火紅的嫁衣襯著肌膚如雪尖坤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天闲擦,我揣著相機(jī)與錄音慢味,去河邊找鬼僚祷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贮缕,可吹牛的內(nèi)容都是我干的辙谜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼感昼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼装哆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起定嗓,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蜕琴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宵溅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凌简,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年恃逻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雏搂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寇损,死狀恐怖凸郑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矛市,我是刑警寧澤芙沥,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站浊吏,受9級(jí)特大地震影響而昨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜找田,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一歌憨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧午阵,春花似錦躺孝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至籽懦,卻和暖如春于个,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暮顺。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工厅篓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秀存,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓羽氮,卻偏偏與公主長(zhǎng)得像或链,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子档押,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,401評(píng)論 0 5
  • 一澳盐、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,748評(píng)論 0 10
  • getopt()函數(shù) 作用 解析獲取到的命令行參數(shù),一般用來解析sys.argv 使用 getopt()函數(shù)為ge...
    閉眼就能看得見閱讀 324評(píng)論 0 0
  • 0X00 函數(shù)的作用 用來解析既有選項(xiàng)又有參數(shù)的命令行,很多著名的程序都會(huì)采用這種結(jié)構(gòu)和switch case語(yǔ)句...
    exploring_T閱讀 2,518評(píng)論 0 0
  • 強(qiáng)子打小就是個(gè)野孩子令宿,經(jīng)常惹是生非的叼耙。要不是經(jīng)歷那場(chǎng)浩劫,也許一直是一個(gè)一事無成的惡棍粒没。 強(qiáng)子從小脾氣就倔筛婉,每次犯...
    彩色夢(mèng)想閱讀 281評(píng)論 1 6